]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/tests/testHttpReply.cc
2 #include <cppunit/TestAssert.h>
4 #include "HttpHeader.h"
7 #include "mime_header.h"
8 #include "SquidConfig.h"
9 #include "testHttpReply.h"
11 CPPUNIT_TEST_SUITE_REGISTRATION( testHttpReply
);
13 class SquidConfig Config
;
15 /* stub functions to link successfully */
17 #include "MemObject.h"
19 MemObject::endOffset() const
27 testHttpReply::setUp()
30 httpHeaderInitModule();
34 testHttpReply::testSanityCheckFirstLine()
38 Http::StatusCode error
= Http::scNone
;
42 // a valid status line
43 input
.append("HTTP/1.1 200 Okay\n\n", 19);
44 hdr_len
= headersEnd(input
.content(),input
.contentSize());
45 CPPUNIT_ASSERT( 1 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
46 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
50 input
.append("HTTP/1.1 200 Okay \n\n", 28);
51 hdr_len
= headersEnd(input
.content(),input
.contentSize());
52 CPPUNIT_ASSERT( 2 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
53 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
57 #if TODO // these cases are only checked after parse...
58 // invalid status line
59 input
.append("HTTP/1.1 999 Okay\n\n", 19);
60 hdr_len
= headersEnd(input
.content(),input
.contentSize());
61 CPPUNIT_ASSERT( 3 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
62 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
66 input
.append("HTTP/1.1 2000 Okay \n\n", 29);
67 hdr_len
= headersEnd(input
.content(),input
.contentSize());
68 CPPUNIT_ASSERT( 4 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
69 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
74 // valid ICY protocol status line
75 input
.append("ICY 200 Okay\n\n", 14);
76 hdr_len
= headersEnd(input
.content(),input
.contentSize());
77 CPPUNIT_ASSERT( engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
78 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
81 /* NP: the engine saves details about the protocol. even when being reset :( */
82 engine
.protoPrefix
="HTTP/";
86 input
.append("\n\n", 2);
87 hdr_len
= headersEnd(input
.content(),input
.contentSize());
88 CPPUNIT_ASSERT( 5 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
89 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
93 input
.append(" \n\n", 8);
94 hdr_len
= headersEnd(input
.content(),input
.contentSize());
95 CPPUNIT_ASSERT( 6 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
96 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
100 // status line with no message
101 input
.append("HTTP/1.1 200\n\n", 14); /* real case seen */
102 hdr_len
= headersEnd(input
.content(),input
.contentSize());
103 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
104 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
106 error
= Http::scNone
;
108 input
.append("HTTP/1.1 200 \n\n", 15); /* real case seen */
109 hdr_len
= headersEnd(input
.content(),input
.contentSize());
110 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
111 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
113 error
= Http::scNone
;
115 // incomplete (short) status lines... not sane (yet), but no error either.
116 input
.append("H", 1);
117 hdr_len
= headersEnd(input
.content(),input
.contentSize());
118 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
119 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
121 error
= Http::scNone
;
123 input
.append("HTTP/", 5);
124 hdr_len
= headersEnd(input
.content(),input
.contentSize());
125 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
126 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
128 error
= Http::scNone
;
130 input
.append("HTTP/1", 6);
131 hdr_len
= headersEnd(input
.content(),input
.contentSize());
132 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
133 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
135 error
= Http::scNone
;
137 input
.append("HTTP/1.1", 8);
138 hdr_len
= headersEnd(input
.content(),input
.contentSize());
139 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
140 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
142 error
= Http::scNone
;
144 input
.append("HTTP/1.1 ", 9); /* real case seen */
145 hdr_len
= headersEnd(input
.content(),input
.contentSize());
146 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
147 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
149 error
= Http::scNone
;
151 input
.append("HTTP/1.1 20", 14);
152 hdr_len
= headersEnd(input
.content(),input
.contentSize());
153 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
154 CPPUNIT_ASSERT_EQUAL(error
, Http::scNone
);
156 error
= Http::scNone
;
158 // status line with no status
159 input
.append("HTTP/1.1 \n\n", 11);
160 hdr_len
= headersEnd(input
.content(),input
.contentSize());
161 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
162 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
164 error
= Http::scNone
;
166 input
.append("HTTP/1.1 \n\n", 15);
167 hdr_len
= headersEnd(input
.content(),input
.contentSize());
168 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
169 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
171 error
= Http::scNone
;
173 input
.append("HTTP/1.1 Okay\n\n", 16); /* real case seen */
174 hdr_len
= headersEnd(input
.content(),input
.contentSize());
175 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
176 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
178 error
= Http::scNone
;
180 // status line with nul-byte
181 input
.append("HTTP/1.1" "\0" "200 Okay\n\n", 19); /* real case seen */
182 hdr_len
= headersEnd(input
.content(),input
.contentSize());
183 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
184 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
186 error
= Http::scNone
;
188 // status line with negative status
189 input
.append("HTTP/1.1 -000\n\n", 15); /* real case seen */
190 hdr_len
= headersEnd(input
.content(),input
.contentSize());
191 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
192 CPPUNIT_ASSERT_EQUAL(error
, Http::scInvalidHeader
);
194 error
= Http::scNone
;