]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Unit-test http1::RequestParser constructor
authorAmos Jeffries <squid3@treenet.co.nz>
Sun, 1 Jun 2014 15:10:15 +0000 (08:10 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Sun, 1 Jun 2014 15:10:15 +0000 (08:10 -0700)
Also fix several bugs identified by the new test.

src/http/one/RequestParser.h
src/tests/testHttp1Parser.cc
src/tests/testHttp1Parser.h

index c2da5077be89c82a5501d1d6a3181af812ec3b02..a0e3af4aa983622a3b68ecede85f9911f7b59000 100644 (file)
@@ -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;}
index 024ccab33c91400d85b0cd0247fa090037d747fe..4ca81c0188f9ffee9a85a8d305b95b1061aebfcc 100644 (file)
@@ -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,
index f34cf214591080cb8945b63ebe75d1413d6e0d6b..fae1ff4e2ef4b874bb95dbd5e3233cea6a0dcc4a 100644 (file)
@@ -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