Software /
code /
prosody
Changeset
10497:a9fb553b6dbb
net.http.parser tests: Expand tests to include validation of results
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 09 Dec 2019 12:43:32 +0000 |
parents | 10496:ec67425dedf1 |
children | 10498:d302fc749464 |
files | spec/net_http_parser_spec.lua |
diffstat | 1 files changed, 89 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/spec/net_http_parser_spec.lua Mon Dec 09 12:42:22 2019 +0000 +++ b/spec/net_http_parser_spec.lua Mon Dec 09 12:43:32 2019 +0000 @@ -1,16 +1,97 @@ -local httpstreams = { [[ +local http_parser = require "net.http.parser"; + +local function test_stream(stream, expect) + local success_cb = spy.new(function (packet) + assert.is_table(packet); + assert.is_equal(expect.body, packet.body); + end); + + stream = stream:gsub("\n", "\r\n"); + local parser = http_parser.new(success_cb, error, stream:sub(1,4) == "HTTP" and "client" or "server") + for chunk in stream:gmatch("..?.?") do + parser:feed(chunk); + end + + assert.spy(success_cb).was_called(expect.count or 1); +end + + +describe("net.http.parser", function() + describe("parser", function() + it("should handle requests with no content-length or body", function () + test_stream( +[[ GET / HTTP/1.1 Host: example.com -]], [[ +]], + { + body = ""; + } + ); + end); + + it("should handle responses with empty body", function () + test_stream( +[[ HTTP/1.1 200 OK Content-Length: 0 -]], [[ +]], + { + body = ""; + } + ); + end); + + it("should handle simple responses", function () + test_stream( + +[[ HTTP/1.1 200 OK Content-Length: 7 Hello +]], + { + body = "Hello\r\n", count = 1; + } + ); + end); + + it("should handle chunked encoding in responses", function () + test_stream( + +[[ +HTTP/1.1 200 OK +Transfer-Encoding: chunked + +1 +H +1 +e +2 +ll +1 +o +0 + + +]], + { + body = "Hello", count = 1; + } + ); + end); + + it("should handle a stream of responses", function () + test_stream( + +[[ +HTTP/1.1 200 OK +Content-Length: 5 + +Hello HTTP/1.1 200 OK Transfer-Encoding: chunked @@ -25,28 +106,11 @@ 0 -]] -} - - -local http_parser = require "net.http.parser"; - -describe("net.http.parser", function() - describe("#new()", function() - it("should work", function() - for _, stream in ipairs(httpstreams) do - local success; - local function success_cb(packet) - success = true; - end - stream = stream:gsub("\n", "\r\n"); - local parser = http_parser.new(success_cb, error, stream:sub(1,4) == "HTTP" and "client" or "server") - for chunk in stream:gmatch("..?.?") do - parser:feed(chunk); - end - - assert.is_true(success); - end +]], + { + body = "Hello", count = 2; + } + ); end); end); end);