From: Amos Jeffries Date: Sun, 1 Jun 2014 15:10:15 +0000 (-0700) Subject: Unit-test http1::RequestParser constructor X-Git-Tag: merge-candidate-3-v1~506^2~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10c0d36011d48e8f06c08feb36639a813bb72e26;p=thirdparty%2Fsquid.git Unit-test http1::RequestParser constructor Also fix several bugs identified by the new test. --- diff --git a/src/http/one/RequestParser.h b/src/http/one/RequestParser.h index c2da5077be..a0e3af4aa9 100644 --- a/src/http/one/RequestParser.h +++ b/src/http/one/RequestParser.h @@ -23,7 +23,7 @@ class RequestParser : public Http1::Parser public: /* Http::One::Parser API */ - RequestParser() : Parser() {} + RequestParser() : Parser() {clear();} virtual ~RequestParser() {} virtual void clear(); virtual int64_t firstLineSize() const {return req.end - req.start + 1;} diff --git a/src/tests/testHttp1Parser.cc b/src/tests/testHttp1Parser.cc index 024ccab33c..4ca81c0188 100644 --- a/src/tests/testHttp1Parser.cc +++ b/src/tests/testHttp1Parser.cc @@ -78,6 +78,51 @@ testResults(int line, const SBuf &input, Http1::RequestParser &output, struct re CPPUNIT_ASSERT_EQUAL(expect.version, output.msgProtocol_); } +void +testHttp1Parser::testParserConstruct() +{ + // whether the constructor works + { + Http1::RequestParser output; + CPPUNIT_ASSERT_EQUAL(true, output.needsMoreData()); + CPPUNIT_ASSERT_EQUAL(Http1::HTTP_PARSE_NONE, output.parsingStage_); + CPPUNIT_ASSERT_EQUAL(Http::scNone, output.request_parse_status); // XXX: clear() not being called. + CPPUNIT_ASSERT_EQUAL(-1, output.req.start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.end); + CPPUNIT_ASSERT(output.buf_.isEmpty()); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.m_end); + CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_NONE), output.method_); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.u_end); + CPPUNIT_ASSERT(output.uri_.isEmpty()); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output.req.v_end); + CPPUNIT_ASSERT_EQUAL(AnyP::ProtocolVersion(), output.msgProtocol_); + } + + // whether new() works + { + Http1::RequestParser *output = new Http1::RequestParser; + CPPUNIT_ASSERT_EQUAL(true, output->needsMoreData()); + CPPUNIT_ASSERT_EQUAL(Http1::HTTP_PARSE_NONE, output->parsingStage_); + CPPUNIT_ASSERT_EQUAL(Http::scNone, output->request_parse_status); + CPPUNIT_ASSERT_EQUAL(-1, output->req.start); + CPPUNIT_ASSERT_EQUAL(-1, output->req.end); + CPPUNIT_ASSERT(output->buf_.isEmpty()); + CPPUNIT_ASSERT_EQUAL(-1, output->req.m_start); + CPPUNIT_ASSERT_EQUAL(-1, output->req.m_end); + CPPUNIT_ASSERT_EQUAL(HttpRequestMethod(Http::METHOD_NONE), output->method_); + CPPUNIT_ASSERT_EQUAL(-1, output->req.u_start); + CPPUNIT_ASSERT_EQUAL(-1, output->req.u_end); + CPPUNIT_ASSERT(output->uri_.isEmpty()); + CPPUNIT_ASSERT_EQUAL(-1, output->req.v_start); + CPPUNIT_ASSERT_EQUAL(-1, output->req.v_end); + CPPUNIT_ASSERT_EQUAL(AnyP::ProtocolVersion(), output->msgProtocol_); + delete output; + } +} + void testHttp1Parser::testParseRequestLineProtocols() { @@ -1320,8 +1365,8 @@ testHttp1Parser::testDripFeed() .parsed = false, .needsMore = true, .parserState = Http1::HTTP_PARSE_NONE, - .status = Http::scBadRequest, - .msgStart = 0, + .status = Http::scNone, + .msgStart = -1, .msgEnd = -1, .suffixSz = 0, .methodStart = -1, diff --git a/src/tests/testHttp1Parser.h b/src/tests/testHttp1Parser.h index f34cf21459..fae1ff4e2e 100644 --- a/src/tests/testHttp1Parser.h +++ b/src/tests/testHttp1Parser.h @@ -6,6 +6,7 @@ class testHttp1Parser : public CPPUNIT_NS::TestFixture { CPPUNIT_TEST_SUITE( testHttp1Parser ); + CPPUNIT_TEST( testParserConstruct ); CPPUNIT_TEST( testParseRequestLineTerminators ); CPPUNIT_TEST( testParseRequestLineMethods ); CPPUNIT_TEST( testParseRequestLineProtocols ); @@ -17,6 +18,8 @@ class testHttp1Parser : public CPPUNIT_NS::TestFixture protected: void globalSetup(); // MemPools init etc. + void testParserConstruct(); // whether the constructor works + // request-line unit tests void testParseRequestLineTerminators(); // terminator detection correct void testParseRequestLineMethods(); // methoid detection correct