XmlRpcMethodTest.cc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. namespace aria2 {
  17. namespace xmlrpc {
  18. class XmlRpcMethodTest:public CppUnit::TestFixture {
  19. CPPUNIT_TEST_SUITE(XmlRpcMethodTest);
  20. CPPUNIT_TEST(testAddUri);
  21. CPPUNIT_TEST(testChangeOption);
  22. CPPUNIT_TEST(testNoSuchMethod);
  23. CPPUNIT_TEST_SUITE_END();
  24. private:
  25. SharedHandle<DownloadEngine> _e;
  26. SharedHandle<Option> _option;
  27. public:
  28. void setUp()
  29. {
  30. RequestGroup::resetGIDCounter();
  31. _option.reset(new Option());
  32. _e.reset(new DownloadEngine(SharedHandle<EventPoll>(new SelectEventPoll())));
  33. _e->option = _option.get();
  34. _e->_requestGroupMan.reset
  35. (new RequestGroupMan(std::deque<SharedHandle<RequestGroup> >(),
  36. 1, _option.get()));
  37. }
  38. void tearDown() {}
  39. void testAddUri();
  40. void testChangeOption();
  41. void testNoSuchMethod();
  42. };
  43. CPPUNIT_TEST_SUITE_REGISTRATION(XmlRpcMethodTest);
  44. void XmlRpcMethodTest::testAddUri()
  45. {
  46. AddUriXmlRpcMethod m;
  47. XmlRpcRequest req("aria2.addUri", BDE::list());
  48. req._params << BDE::list();
  49. req._params[0] << BDE("http://localhost/");
  50. XmlRpcResponse res = m.execute(req, _e.get());
  51. CPPUNIT_ASSERT_EQUAL(0, res._code);
  52. const std::deque<SharedHandle<RequestGroup> > rgs =
  53. _e->_requestGroupMan->getReservedGroups();
  54. CPPUNIT_ASSERT_EQUAL((size_t)1, rgs.size());
  55. CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/"),
  56. rgs.front()->getRemainingUris().front());
  57. }
  58. void XmlRpcMethodTest::testChangeOption()
  59. {
  60. SharedHandle<RequestGroup> group
  61. (new RequestGroup(_option, std::deque<std::string>()));
  62. _e->_requestGroupMan->addReservedGroup(group);
  63. ChangeOptionXmlRpcMethod m;
  64. XmlRpcRequest req("aria2.changeOption", BDE::list());
  65. req._params << BDE("1");
  66. BDE opt = BDE::dict();
  67. opt[PREF_MAX_DOWNLOAD_LIMIT] = BDE("100K");
  68. opt[PREF_MAX_UPLOAD_LIMIT] = BDE("50K");
  69. req._params << opt;
  70. XmlRpcResponse res = m.execute(req, _e.get());
  71. CPPUNIT_ASSERT_EQUAL(0, res._code);
  72. CPPUNIT_ASSERT_EQUAL((unsigned int)100*1024,
  73. group->getMaxDownloadSpeedLimit());
  74. CPPUNIT_ASSERT_EQUAL((unsigned int)50*1024, group->getMaxUploadSpeedLimit());
  75. }
  76. void XmlRpcMethodTest::testNoSuchMethod()
  77. {
  78. NoSuchMethodXmlRpcMethod m;
  79. XmlRpcRequest req("make.hamburger", BDE::none);
  80. XmlRpcResponse res = m.execute(req, 0);
  81. CPPUNIT_ASSERT_EQUAL(1, res._code);
  82. CPPUNIT_ASSERT_EQUAL(std::string("No such method: make.hamburger"),
  83. res._param["faultString"].s());
  84. CPPUNIT_ASSERT_EQUAL
  85. (std::string("<?xml version=\"1.0\"?>"
  86. "<methodResponse>"
  87. "<fault>"
  88. "<value>"
  89. "<struct>"
  90. "<member>"
  91. "<name>faultCode</name><value><int>1</int></value>"
  92. "</member>"
  93. "<member>"
  94. "<name>faultString</name>"
  95. "<value>"
  96. "<string>No such method: make.hamburger</string>"
  97. "</value>"
  98. "</member>"
  99. "</struct>"
  100. "</value>"
  101. "</fault>"
  102. "</methodResponse>"),
  103. res.toXml());
  104. }
  105. } // namespace xmlrpc
  106. } // namespace aria2