ChunkedEncodingTest.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "ChunkedEncoding.h"
  2. #include <fstream>
  3. #include <iostream>
  4. #include <string>
  5. #include <cppunit/extensions/HelperMacros.h>
  6. namespace aria2 {
  7. class ChunkedEncodingTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(ChunkedEncodingTest);
  9. CPPUNIT_TEST(testInflate1);
  10. CPPUNIT_TEST(testInflateLargeChunk);
  11. CPPUNIT_TEST_SUITE_END();
  12. private:
  13. ChunkedEncoding* enc;
  14. public:
  15. void setUp() {
  16. enc = new ChunkedEncoding();
  17. enc->init();
  18. }
  19. void testInflate1();
  20. void testInflateLargeChunk();
  21. };
  22. CPPUNIT_TEST_SUITE_REGISTRATION( ChunkedEncodingTest );
  23. void ChunkedEncodingTest::testInflate1() {
  24. std::string msg = "a\r\n1234567890\r\n";
  25. unsigned char buf[100];
  26. int32_t len = sizeof(buf);
  27. enc->inflate(buf, len,
  28. reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
  29. CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), std::string(&buf[0], &buf[len]));
  30. // second pass
  31. len = sizeof(buf);
  32. msg = "3;extensionIgnored\r\n123\r\n0\r\n";
  33. enc->inflate(buf, len,
  34. reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
  35. CPPUNIT_ASSERT_EQUAL(std::string("123"), std::string(&buf[0], &buf[len]));
  36. // input is over
  37. CPPUNIT_ASSERT(enc->finished());
  38. }
  39. void ChunkedEncodingTest::testInflateLargeChunk() {
  40. // give over 4096 character chunk
  41. std::fstream is("4096chunk.txt", std::ios::in);
  42. if(is.fail()) {
  43. CPPUNIT_FAIL("cannot open file 4096chunk.txt");
  44. }
  45. std::string body;
  46. is >> body;
  47. unsigned char buf[4097];
  48. int32_t len = sizeof(buf);
  49. for(int i = 0; i < 2; i++) {
  50. std::string msg = "1000\r\n"+body+"\r\n";
  51. len = sizeof(buf);
  52. enc->inflate(buf, len,
  53. reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
  54. CPPUNIT_ASSERT_EQUAL(body, std::string(&buf[0], &buf[len]));
  55. }
  56. enc->inflate(buf, len, reinterpret_cast<const unsigned char*>("0\r\n"), 3);
  57. CPPUNIT_ASSERT_EQUAL((int32_t)0, len);
  58. CPPUNIT_ASSERT(enc->finished());
  59. }
  60. } // namespace aria2