summaryrefslogtreecommitdiff
path: root/test/ChunkedDecodingStreamFilterTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-06-18 23:42:46 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-06-18 23:42:46 +0900
commit9ba65aea1d8438c2b6b8eba0b380466983e6c236 (patch)
tree0b3f1f3c8c416cc6f74aaf86f15091eec7d06afa /test/ChunkedDecodingStreamFilterTest.cc
parentf3a5aa3bef17a0d8f86460f034ced4e318699e54 (diff)
Rewritten ChunkedDecodingStreamFilter
Diffstat (limited to 'test/ChunkedDecodingStreamFilterTest.cc')
-rw-r--r--test/ChunkedDecodingStreamFilterTest.cc243
1 files changed, 134 insertions, 109 deletions
diff --git a/test/ChunkedDecodingStreamFilterTest.cc b/test/ChunkedDecodingStreamFilterTest.cc
index 5f623e92..ae079272 100644
--- a/test/ChunkedDecodingStreamFilterTest.cc
+++ b/test/ChunkedDecodingStreamFilterTest.cc
@@ -59,119 +59,144 @@ CPPUNIT_TEST_SUITE_REGISTRATION( ChunkedDecodingStreamFilterTest );
void ChunkedDecodingStreamFilterTest::testTransform()
{
try {
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("a\r\n1234567890\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)10, r);
- CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), writer_->getString());
- }
- clearWriter();
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("a\r\n1234567890\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)10, r);
+ CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), writer_->getString());
+ CPPUNIT_ASSERT_EQUAL((size_t)15, filter_->getBytesProcessed());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ clearWriter();
+ try {
// Feed extension; see it is ignored.
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>
- ("3;extensionIgnored\r\n123\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)3, r);
- CPPUNIT_ASSERT_EQUAL(std::string("123"), writer_->getString());
- }
- clearWriter();
- // Feed 2extensions; see it is ignored.
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>
- ("3;extension1;extension2;\r\n123\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)3, r);
- CPPUNIT_ASSERT_EQUAL(std::string("123"), writer_->getString());
- }
- clearWriter();
- // Not all chunk size is available
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("1");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
- }
- clearWriter();
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("0\r\n1234567890123456\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)16, r);
- CPPUNIT_ASSERT_EQUAL(std::string("1234567890123456"),
- writer_->getString());
- }
- clearWriter();
- // Not all chunk data is available
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("10\r\n1234567890");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)10, r);
- CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), writer_->getString());
- }
- clearWriter();
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("123456\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)6, r);
- CPPUNIT_ASSERT_EQUAL(std::string("123456"), writer_->getString());
- }
- clearWriter();
- // no trailing CR LF.
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("10\r\n1234567890123456");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)16, r);
- CPPUNIT_ASSERT_EQUAL(std::string("1234567890123456"),
- writer_->getString());
- }
- clearWriter();
- // feed only CR
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("\r");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
- }
- // feed next LF
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
- CPPUNIT_ASSERT_EQUAL(std::string(""), writer_->getString());
- }
- // feed 0 CR LF.
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("0\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
- }
- // feed trailer
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("trailer\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
- }
- // feed final CRLF
- {
- std::basic_string<unsigned char> msg =
- reinterpret_cast<const unsigned char*>("\r\n");
- ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
- CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
- }
- // input is over
- CPPUNIT_ASSERT(filter_->finished());
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>
+ ("3;extensionIgnored\r\n123\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)3, r);
+ CPPUNIT_ASSERT_EQUAL(std::string("123"), writer_->getString());
+ CPPUNIT_ASSERT_EQUAL((size_t)25, filter_->getBytesProcessed());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+
+ clearWriter();
+ // Feed 2extensions; see it is ignored.
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>
+ ("3;extension1;extension2;\r\n123\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)3, r);
+ CPPUNIT_ASSERT_EQUAL(std::string("123"), writer_->getString());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ clearWriter();
+ // Not all chunk size is available
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("1");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ clearWriter();
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("0\r\n1234567890123456\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)16, r);
+ CPPUNIT_ASSERT_EQUAL(std::string("1234567890123456"),
+ writer_->getString());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ clearWriter();
+ // Not all chunk data is available
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("10\r\n1234567890");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)10, r);
+ CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), writer_->getString());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ clearWriter();
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("123456\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)6, r);
+ CPPUNIT_ASSERT_EQUAL(std::string("123456"), writer_->getString());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ clearWriter();
+ // no trailing CR LF.
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("10\r\n1234567890123456");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)16, r);
+ CPPUNIT_ASSERT_EQUAL(std::string("1234567890123456"),
+ writer_->getString());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ clearWriter();
+ // feed only CR
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("\r");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ // feed next LF
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
+ CPPUNIT_ASSERT_EQUAL(std::string(""), writer_->getString());
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ // feed 0 CR LF.
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("0\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
} catch(DlAbortEx& e) {
CPPUNIT_FAIL(e.stackTrace());
}
+ // feed trailer
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("trailer\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ // feed final CRLF
+ try {
+ std::basic_string<unsigned char> msg =
+ reinterpret_cast<const unsigned char*>("\r\n");
+ ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size());
+ CPPUNIT_ASSERT_EQUAL((ssize_t)0, r);
+ } catch(DlAbortEx& e) {
+ CPPUNIT_FAIL(e.stackTrace());
+ }
+ // input is over
+ CPPUNIT_ASSERT(filter_->finished());
}
void ChunkedDecodingStreamFilterTest::testTransform_withoutTrailer()