12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include "ChunkedEncoding.h"
- #include <fstream>
- #include <iostream>
- #include <string>
- #include <cppunit/extensions/HelperMacros.h>
- namespace aria2 {
- class ChunkedEncodingTest:public CppUnit::TestFixture {
- CPPUNIT_TEST_SUITE(ChunkedEncodingTest);
- CPPUNIT_TEST(testInflate1);
- CPPUNIT_TEST(testInflateLargeChunk);
- CPPUNIT_TEST_SUITE_END();
- private:
- ChunkedEncoding* enc;
- public:
- void setUp() {
- enc = new ChunkedEncoding();
- enc->init();
- }
- void testInflate1();
- void testInflateLargeChunk();
- };
- CPPUNIT_TEST_SUITE_REGISTRATION( ChunkedEncodingTest );
- void ChunkedEncodingTest::testInflate1() {
- std::string msg = "a\r\n1234567890\r\n";
- unsigned char buf[100];
- int32_t len = sizeof(buf);
- enc->inflate(buf, len,
- reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
- CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), std::string(&buf[0], &buf[len]));
- // second pass
- len = sizeof(buf);
- msg = "3;extensionIgnored\r\n123\r\n0\r\n";
- enc->inflate(buf, len,
- reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
- CPPUNIT_ASSERT_EQUAL(std::string("123"), std::string(&buf[0], &buf[len]));
- // input is over
- CPPUNIT_ASSERT(enc->finished());
- }
- void ChunkedEncodingTest::testInflateLargeChunk() {
- // give over 4096 character chunk
- std::fstream is("4096chunk.txt", std::ios::in);
- if(is.fail()) {
- CPPUNIT_FAIL("cannot open file 4096chunk.txt");
- }
- std::string body;
- is >> body;
- unsigned char buf[4097];
- int32_t len = sizeof(buf);
- for(int i = 0; i < 2; i++) {
- std::string msg = "1000\r\n"+body+"\r\n";
- len = sizeof(buf);
- enc->inflate(buf, len,
- reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
- CPPUNIT_ASSERT_EQUAL(body, std::string(&buf[0], &buf[len]));
- }
- enc->inflate(buf, len, reinterpret_cast<const unsigned char*>("0\r\n"), 3);
- CPPUNIT_ASSERT_EQUAL((int32_t)0, len);
- CPPUNIT_ASSERT(enc->finished());
- }
- } // namespace aria2
|