ChunkedEncodingTest.cc 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "ChunkedEncoding.h"
  2. #include <fstream>
  3. #include <iostream>
  4. #include <string>
  5. #include <cppunit/extensions/HelperMacros.h>
  6. using namespace std;
  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. string msg = "a\r\n1234567890\r\n";
  25. char buf[100];
  26. int32_t len = sizeof(buf);
  27. enc->inflate(buf, len, msg.c_str(), msg.size());
  28. buf[len] = '\0';
  29. CPPUNIT_ASSERT_EQUAL(string("1234567890"), string(buf));
  30. // second pass
  31. len = sizeof(buf);
  32. msg = "3;extensionIgnored\r\n123\r\n0\r\n";
  33. enc->inflate(buf, len, msg.c_str(), msg.size());
  34. buf[len] = '\0';
  35. CPPUNIT_ASSERT_EQUAL(string("123"), string(buf));
  36. // input is over
  37. CPPUNIT_ASSERT(enc->finished());
  38. }
  39. void ChunkedEncodingTest::testInflateLargeChunk() {
  40. // give over 4096 character chunk
  41. fstream is("4096chunk.txt", ios::in);
  42. if(is.fail()) {
  43. CPPUNIT_FAIL("cannot open file 4096chunk.txt");
  44. }
  45. string body;
  46. is >> body;
  47. char buf[4097];
  48. int32_t len = sizeof(buf);
  49. for(int i = 0; i < 2; i++) {
  50. string msg = "1000\r\n"+body+"\r\n";
  51. len = sizeof(buf);
  52. enc->inflate(buf, len, msg.c_str(), msg.size());
  53. buf[len] = '\0';
  54. CPPUNIT_ASSERT_EQUAL(body, string(buf));
  55. }
  56. enc->inflate(buf, len, "0\r\n", 3);
  57. CPPUNIT_ASSERT_EQUAL((int32_t)0, len);
  58. CPPUNIT_ASSERT(enc->finished());
  59. }