XmlRpcRequestProcessorTest.cc 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "XmlRpcRequestProcessor.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "XmlRpcRequestParserStateMachine.h"
  4. namespace aria2 {
  5. namespace xmlrpc {
  6. class XmlRpcRequestProcessorTest:public CppUnit::TestFixture {
  7. CPPUNIT_TEST_SUITE(XmlRpcRequestProcessorTest);
  8. CPPUNIT_TEST(testParseMemory);
  9. CPPUNIT_TEST(testParseMemory_shouldFail);
  10. CPPUNIT_TEST_SUITE_END();
  11. public:
  12. void setUp() {}
  13. void tearDown() {}
  14. void testParseMemory();
  15. void testParseMemory_shouldFail();
  16. };
  17. CPPUNIT_TEST_SUITE_REGISTRATION(XmlRpcRequestProcessorTest);
  18. void XmlRpcRequestProcessorTest::testParseMemory()
  19. {
  20. XmlRpcRequestProcessor proc;
  21. XmlRpcRequest req =
  22. proc.parseMemory("<?xml version=\"1.0\"?>"
  23. "<methodCall>"
  24. " <methodName>aria2.addURI</methodName>"
  25. " <params>"
  26. " <param>"
  27. " <value><i4>100</i4></value>"
  28. " </param>"
  29. " <param>"
  30. " <value>"
  31. " <struct>"
  32. " <member>"
  33. " <name>max-count</name>"
  34. " <value><i4>65535</i4></value>"
  35. " </member>"
  36. " <member>"
  37. " <name>seed-ratio</name>"
  38. " <value><double>0.99</double></value>"
  39. " </member>"
  40. " </struct>"
  41. " </value>"
  42. " </param>"
  43. " <param>"
  44. " <value>"
  45. " <array>"
  46. " <data>"
  47. " <value><string>pudding</string></value>"
  48. " <value><base64>aGVsbG8gd29ybGQ=</base64></value>"
  49. " </data>"
  50. " </array>"
  51. " </value>"
  52. " </param>"
  53. " </params>"
  54. "</methodCall>");
  55. CPPUNIT_ASSERT_EQUAL(std::string("aria2.addURI"), req._methodName);
  56. CPPUNIT_ASSERT_EQUAL((size_t)3, req._params.size());
  57. CPPUNIT_ASSERT_EQUAL((int64_t)100, req._params[0].i());
  58. CPPUNIT_ASSERT_EQUAL((int64_t)65535, req._params[1]["max-count"].i());
  59. // Current implementation handles double as string.
  60. CPPUNIT_ASSERT_EQUAL(std::string("0.99"), req._params[1]["seed-ratio"].s());
  61. CPPUNIT_ASSERT_EQUAL(std::string("pudding"), req._params[2][0].s());
  62. CPPUNIT_ASSERT_EQUAL(std::string("hello world"), req._params[2][1].s());
  63. }
  64. void XmlRpcRequestProcessorTest::testParseMemory_shouldFail()
  65. {
  66. XmlRpcRequestProcessor proc;
  67. try {
  68. proc.parseMemory("<methodCall>"
  69. " <methodName>aria2.addURI</methodName>"
  70. " <params>"
  71. " <param>"
  72. " <value><i4>100</i4></value>"
  73. " </param>");
  74. CPPUNIT_FAIL("exception must be thrown.");
  75. } catch(RecoverableException& e) {
  76. // success
  77. }
  78. }
  79. } // namespace xmlrpc
  80. } // namespace aria2