]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/tests/testHttpReply.cc
1 #define SQUID_UNIT_TEST 1
3 #include <cppunit/TestAssert.h>
5 #include "testHttpReply.h"
10 CPPUNIT_TEST_SUITE_REGISTRATION( testHttpReply
);
12 struct SquidConfig Config
;
14 /* stub functions to link successfully */
16 #include "MemObject.h"
18 MemObject::endOffset() const
23 #include "ConfigParser.h"
25 ConfigParser::destruct()
27 // CALLED as shutdown no-op
28 // fatal("ConfigParser::destruct. Not implemented.");
32 eventAdd(const char *name
, EVH
* func
, void *arg
, double when
, int, bool cbdata
)
34 // CALLED as setUp no-op
35 // fatal("eventAdd. Not implemented.");
41 testHttpReply::setUp()
44 httpHeaderInitModule();
48 testHttpReply::testSanityCheckFirstLine()
52 http_status error
= HTTP_STATUS_NONE
;
56 // a valid status line
57 input
.append("HTTP/1.1 200 Okay\n\n", 19);
58 hdr_len
= headersEnd(input
.content(),input
.contentSize());
59 CPPUNIT_ASSERT( 1 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
60 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
62 error
= HTTP_STATUS_NONE
;
64 input
.append("HTTP/1.1 200 Okay \n\n", 28);
65 hdr_len
= headersEnd(input
.content(),input
.contentSize());
66 CPPUNIT_ASSERT( 2 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
67 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
69 error
= HTTP_STATUS_NONE
;
71 #if TODO // these cases are only checked after parse...
72 // invalid status line
73 input
.append("HTTP/1.1 999 Okay\n\n", 19);
74 hdr_len
= headersEnd(input
.content(),input
.contentSize());
75 CPPUNIT_ASSERT( 3 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
76 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
78 error
= HTTP_STATUS_NONE
;
80 input
.append("HTTP/1.1 2000 Okay \n\n", 29);
81 hdr_len
= headersEnd(input
.content(),input
.contentSize());
82 CPPUNIT_ASSERT( 4 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
83 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
85 error
= HTTP_STATUS_NONE
;
88 // valid ICY protocol status line
89 input
.append("ICY 200 Okay\n\n", 18);
90 hdr_len
= headersEnd(input
.content(),input
.contentSize());
91 CPPUNIT_ASSERT( engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
92 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
94 error
= HTTP_STATUS_NONE
;
95 /* NP: the engine saves details about the protocol. even when being reset :( */
96 engine
.protoPrefix
="HTTP/";
100 input
.append("\n\n", 2);
101 hdr_len
= headersEnd(input
.content(),input
.contentSize());
102 CPPUNIT_ASSERT( 5 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
103 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
105 error
= HTTP_STATUS_NONE
;
107 input
.append(" \n\n", 8);
108 hdr_len
= headersEnd(input
.content(),input
.contentSize());
109 CPPUNIT_ASSERT( 6 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
110 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
112 error
= HTTP_STATUS_NONE
;
114 // status line with no message
115 input
.append("HTTP/1.1 200\n\n", 14); /* real case seen */
116 hdr_len
= headersEnd(input
.content(),input
.contentSize());
117 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
118 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
120 error
= HTTP_STATUS_NONE
;
122 input
.append("HTTP/1.1 200 \n\n", 15); /* real case seen */
123 hdr_len
= headersEnd(input
.content(),input
.contentSize());
124 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
125 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
127 error
= HTTP_STATUS_NONE
;
129 // incomplete (short) status lines... not sane (yet), but no error either.
130 input
.append("H", 1);
131 hdr_len
= headersEnd(input
.content(),input
.contentSize());
132 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
133 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
135 error
= HTTP_STATUS_NONE
;
137 input
.append("HTTP/", 5);
138 hdr_len
= headersEnd(input
.content(),input
.contentSize());
139 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
140 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
142 error
= HTTP_STATUS_NONE
;
144 input
.append("HTTP/1", 6);
145 hdr_len
= headersEnd(input
.content(),input
.contentSize());
146 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
147 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
149 error
= HTTP_STATUS_NONE
;
151 input
.append("HTTP/1.1", 8);
152 hdr_len
= headersEnd(input
.content(),input
.contentSize());
153 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
154 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
156 error
= HTTP_STATUS_NONE
;
158 input
.append("HTTP/1.1 ", 9); /* real case seen */
159 hdr_len
= headersEnd(input
.content(),input
.contentSize());
160 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
161 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
163 error
= HTTP_STATUS_NONE
;
165 input
.append("HTTP/1.1 20", 14);
166 hdr_len
= headersEnd(input
.content(),input
.contentSize());
167 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
168 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
170 error
= HTTP_STATUS_NONE
;
172 // status line with no status
173 input
.append("HTTP/1.1 \n\n", 11);
174 hdr_len
= headersEnd(input
.content(),input
.contentSize());
175 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
176 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
178 error
= HTTP_STATUS_NONE
;
180 input
.append("HTTP/1.1 \n\n", 15);
181 hdr_len
= headersEnd(input
.content(),input
.contentSize());
182 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
183 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
185 error
= HTTP_STATUS_NONE
;
187 input
.append("HTTP/1.1 Okay\n\n", 16); /* real case seen */
188 hdr_len
= headersEnd(input
.content(),input
.contentSize());
189 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
190 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
192 error
= HTTP_STATUS_NONE
;
194 // status line with nul-byte
195 input
.append("HTTP/1.1\0200 Okay\n\n", 19); /* real case seen */
196 hdr_len
= headersEnd(input
.content(),input
.contentSize());
197 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
198 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
200 error
= HTTP_STATUS_NONE
;
202 // status line with negative status
203 input
.append("HTTP/1.1 -000\n\n", 15); /* real case seen */
204 hdr_len
= headersEnd(input
.content(),input
.contentSize());
205 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
206 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
208 error
= HTTP_STATUS_NONE
;