From 608e6243a2b15bfc28c3524ed45d5fc7598e8565 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 30 Jun 2009 13:47:41 -0700 Subject: Add trailer_parser for parsing trailers Eventually this (and ChunkedReader) may be done in C/Ragel along with the existing HttpParser. --- test/unit/test_trailer_parser.rb | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 test/unit/test_trailer_parser.rb (limited to 'test') diff --git a/test/unit/test_trailer_parser.rb b/test/unit/test_trailer_parser.rb new file mode 100644 index 0000000..e41d00f --- /dev/null +++ b/test/unit/test_trailer_parser.rb @@ -0,0 +1,52 @@ +require 'test/unit' +require 'unicorn' +require 'unicorn/http11' +require 'unicorn/trailer_parser' + +class TestTrailerParser < Test::Unit::TestCase + + def test_basic + tp = Unicorn::TrailerParser.new('Content-MD5') + env = {} + assert ! tp.execute!(env, "Content-MD5: asdf") + assert env.empty? + assert tp.execute!(env, "Content-MD5: asdf\r\n") + assert_equal 'asdf', env['CONTENT_MD5'] + assert_equal 1, env.size + end + + def test_invalid_trailer + tp = Unicorn::TrailerParser.new('Content-MD5') + env = {} + assert_raises(Unicorn::HttpParserError) { + tp.execute!(env, "Content-MD: asdf\r\n") + } + assert env.empty? + end + + def test_multiple_trailer + tp = Unicorn::TrailerParser.new('Foo,Bar') + env = {} + buf = "Bar: a\r\nFoo: b\r\n" + assert tp.execute!(env, buf) + assert_equal 'a', env['BAR'] + assert_equal 'b', env['FOO'] + end + + def test_too_big_key + tp = Unicorn::TrailerParser.new('Foo,Bar') + env = {} + buf = "Bar#{'a' * 1024}: a\r\nFoo: b\r\n" + assert_raises(Unicorn::HttpParserError) { tp.execute!(env, buf) } + assert env.empty? + end + + def test_too_big_value + tp = Unicorn::TrailerParser.new('Foo,Bar') + env = {} + buf = "Bar: #{'a' * (1024 * 1024)}: a\r\nFoo: b\r\n" + assert_raises(Unicorn::HttpParserError) { tp.execute!(env, buf) } + assert env.empty? + end + +end -- cgit v1.2.3-24-ge0c7