XmlRpcMethodTest.cc 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. namespace aria2 {
  18. namespace xmlrpc {
  19. class XmlRpcMethodTest:public CppUnit::TestFixture {
  20. CPPUNIT_TEST_SUITE(XmlRpcMethodTest);
  21. CPPUNIT_TEST(testAddUri);
  22. CPPUNIT_TEST(testAddTorrent);
  23. CPPUNIT_TEST(testAddMetalink);
  24. CPPUNIT_TEST(testChangeOption);
  25. CPPUNIT_TEST(testChangeGlobalOption);
  26. CPPUNIT_TEST(testNoSuchMethod);
  27. CPPUNIT_TEST_SUITE_END();
  28. private:
  29. SharedHandle<DownloadEngine> _e;
  30. SharedHandle<Option> _option;
  31. public:
  32. void setUp()
  33. {
  34. RequestGroup::resetGIDCounter();
  35. _option.reset(new Option());
  36. _option->put(PREF_DIR, "/tmp");
  37. _e.reset(new DownloadEngine(SharedHandle<EventPoll>(new SelectEventPoll())));
  38. _e->option = _option.get();
  39. _e->_requestGroupMan.reset
  40. (new RequestGroupMan(std::deque<SharedHandle<RequestGroup> >(),
  41. 1, _option.get()));
  42. }
  43. void tearDown() {}
  44. void testAddUri();
  45. void testAddTorrent();
  46. void testAddMetalink();
  47. void testChangeOption();
  48. void testChangeGlobalOption();
  49. void testNoSuchMethod();
  50. };
  51. CPPUNIT_TEST_SUITE_REGISTRATION(XmlRpcMethodTest);
  52. void XmlRpcMethodTest::testAddUri()
  53. {
  54. AddUriXmlRpcMethod m;
  55. XmlRpcRequest req("aria2.addUri", BDE::list());
  56. req._params << BDE::list();
  57. req._params[0] << BDE("http://localhost/");
  58. XmlRpcResponse res = m.execute(req, _e.get());
  59. CPPUNIT_ASSERT_EQUAL(0, res._code);
  60. const std::deque<SharedHandle<RequestGroup> > rgs =
  61. _e->_requestGroupMan->getReservedGroups();
  62. CPPUNIT_ASSERT_EQUAL((size_t)1, rgs.size());
  63. CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/"),
  64. rgs.front()->getRemainingUris().front());
  65. }
  66. void XmlRpcMethodTest::testAddTorrent()
  67. {
  68. AddTorrentXmlRpcMethod m;
  69. XmlRpcRequest req("aria2.addTorrent", BDE::list());
  70. req._params << BDE(readFile("single.torrent"));
  71. BDE uris = BDE::list();
  72. uris << BDE("http://localhost/aria2-0.8.2.tar.bz2");
  73. req._params << uris;
  74. {
  75. XmlRpcResponse res = m.execute(req, _e.get());
  76. CPPUNIT_ASSERT_EQUAL(0, res._code);
  77. CPPUNIT_ASSERT_EQUAL(std::string("1"), res._param.s());
  78. SharedHandle<RequestGroup> group = _e->_requestGroupMan->findReservedGroup(1);
  79. CPPUNIT_ASSERT(!group.isNull());
  80. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-0.8.2.tar.bz2"),
  81. group->getFilePath());
  82. CPPUNIT_ASSERT_EQUAL((size_t)1, group->getRemainingUris().size());
  83. CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/aria2-0.8.2.tar.bz2"),
  84. group->getRemainingUris()[0]);
  85. }
  86. // with options
  87. BDE opt = BDE::dict();
  88. opt[PREF_DIR] = BDE("/sink");
  89. req._params << opt;
  90. {
  91. XmlRpcResponse res = m.execute(req, _e.get());
  92. CPPUNIT_ASSERT_EQUAL(0, res._code);
  93. CPPUNIT_ASSERT_EQUAL(std::string("/sink/aria2-0.8.2.tar.bz2"),
  94. _e->_requestGroupMan->findReservedGroup(2)->getFilePath());
  95. }
  96. }
  97. void XmlRpcMethodTest::testAddMetalink()
  98. {
  99. AddMetalinkXmlRpcMethod m;
  100. XmlRpcRequest req("aria2.addMetalink", BDE::list());
  101. req._params << BDE(readFile("2files.metalink"));
  102. {
  103. XmlRpcResponse res = m.execute(req, _e.get());
  104. CPPUNIT_ASSERT_EQUAL(0, res._code);
  105. CPPUNIT_ASSERT_EQUAL((size_t)2, res._param.size());
  106. CPPUNIT_ASSERT_EQUAL(std::string("1"), res._param[0].s());
  107. CPPUNIT_ASSERT_EQUAL(std::string("2"), res._param[1].s());
  108. SharedHandle<RequestGroup> tar = _e->_requestGroupMan->findReservedGroup(1);
  109. CPPUNIT_ASSERT(!tar.isNull());
  110. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-5.0.0.tar.bz2"),
  111. tar->getFilePath());
  112. SharedHandle<RequestGroup> deb = _e->_requestGroupMan->findReservedGroup(2);
  113. CPPUNIT_ASSERT(!deb.isNull());
  114. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-5.0.0.deb"),
  115. deb->getFilePath());
  116. }
  117. // with options
  118. BDE opt = BDE::dict();
  119. opt[PREF_DIR] = BDE("/sink");
  120. req._params << opt;
  121. {
  122. XmlRpcResponse res = m.execute(req, _e.get());
  123. CPPUNIT_ASSERT_EQUAL(0, res._code);
  124. CPPUNIT_ASSERT_EQUAL(std::string("/sink/aria2-5.0.0.tar.bz2"),
  125. _e->_requestGroupMan->findReservedGroup(3)->getFilePath());
  126. }
  127. }
  128. void XmlRpcMethodTest::testChangeOption()
  129. {
  130. SharedHandle<RequestGroup> group
  131. (new RequestGroup(_option, std::deque<std::string>()));
  132. _e->_requestGroupMan->addReservedGroup(group);
  133. ChangeOptionXmlRpcMethod m;
  134. XmlRpcRequest req("aria2.changeOption", BDE::list());
  135. req._params << BDE("1");
  136. BDE opt = BDE::dict();
  137. opt[PREF_MAX_DOWNLOAD_LIMIT] = BDE("100K");
  138. opt[PREF_MAX_UPLOAD_LIMIT] = BDE("50K");
  139. req._params << opt;
  140. XmlRpcResponse res = m.execute(req, _e.get());
  141. CPPUNIT_ASSERT_EQUAL(0, res._code);
  142. CPPUNIT_ASSERT_EQUAL((unsigned int)100*1024,
  143. group->getMaxDownloadSpeedLimit());
  144. CPPUNIT_ASSERT_EQUAL((unsigned int)50*1024, group->getMaxUploadSpeedLimit());
  145. }
  146. void XmlRpcMethodTest::testChangeGlobalOption()
  147. {
  148. ChangeGlobalOptionXmlRpcMethod m;
  149. XmlRpcRequest req("aria2.changeGlobalOption", BDE::list());
  150. BDE opt = BDE::dict();
  151. opt[PREF_MAX_OVERALL_DOWNLOAD_LIMIT] = BDE("100K");
  152. opt[PREF_MAX_OVERALL_UPLOAD_LIMIT] = BDE("50K");
  153. req._params << opt;
  154. XmlRpcResponse res = m.execute(req, _e.get());
  155. CPPUNIT_ASSERT_EQUAL(0, res._code);
  156. CPPUNIT_ASSERT_EQUAL((unsigned int)100*1024,
  157. _e->_requestGroupMan->getMaxOverallDownloadSpeedLimit());
  158. CPPUNIT_ASSERT_EQUAL((unsigned int)50*1024,
  159. _e->_requestGroupMan->getMaxOverallUploadSpeedLimit());
  160. }
  161. void XmlRpcMethodTest::testNoSuchMethod()
  162. {
  163. NoSuchMethodXmlRpcMethod m;
  164. XmlRpcRequest req("make.hamburger", BDE::none);
  165. XmlRpcResponse res = m.execute(req, 0);
  166. CPPUNIT_ASSERT_EQUAL(1, res._code);
  167. CPPUNIT_ASSERT_EQUAL(std::string("No such method: make.hamburger"),
  168. res._param["faultString"].s());
  169. CPPUNIT_ASSERT_EQUAL
  170. (std::string("<?xml version=\"1.0\"?>"
  171. "<methodResponse>"
  172. "<fault>"
  173. "<value>"
  174. "<struct>"
  175. "<member>"
  176. "<name>faultCode</name><value><int>1</int></value>"
  177. "</member>"
  178. "<member>"
  179. "<name>faultString</name>"
  180. "<value>"
  181. "<string>No such method: make.hamburger</string>"
  182. "</value>"
  183. "</member>"
  184. "</struct>"
  185. "</value>"
  186. "</fault>"
  187. "</methodResponse>"),
  188. res.toXml());
  189. }
  190. } // namespace xmlrpc
  191. } // namespace aria2