]>
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"
6 #include "HttpHeader.h"
9 #include "mime_header.h"
10 #include "SquidConfig.h"
12 CPPUNIT_TEST_SUITE_REGISTRATION( testHttpReply
);
14 class SquidConfig Config
;
16 /* stub functions to link successfully */
18 #include "MemObject.h"
20 MemObject::endOffset() const
25 #include "ConfigParser.h"
28 eventAdd(const char *name
, EVH
* func
, void *arg
, double when
, int, bool cbdata
)
30 // CALLED as setUp no-op
31 // fatal("eventAdd. Not implemented.");
37 testHttpReply::setUp()
40 httpHeaderInitModule();
44 testHttpReply::testSanityCheckFirstLine()
48 http_status error
= HTTP_STATUS_NONE
;
52 // a valid status line
53 input
.append("HTTP/1.1 200 Okay\n\n", 19);
54 hdr_len
= headersEnd(input
.content(),input
.contentSize());
55 CPPUNIT_ASSERT( 1 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
56 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
58 error
= HTTP_STATUS_NONE
;
60 input
.append("HTTP/1.1 200 Okay \n\n", 28);
61 hdr_len
= headersEnd(input
.content(),input
.contentSize());
62 CPPUNIT_ASSERT( 2 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
63 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
65 error
= HTTP_STATUS_NONE
;
67 #if TODO // these cases are only checked after parse...
68 // invalid status line
69 input
.append("HTTP/1.1 999 Okay\n\n", 19);
70 hdr_len
= headersEnd(input
.content(),input
.contentSize());
71 CPPUNIT_ASSERT( 3 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
72 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
74 error
= HTTP_STATUS_NONE
;
76 input
.append("HTTP/1.1 2000 Okay \n\n", 29);
77 hdr_len
= headersEnd(input
.content(),input
.contentSize());
78 CPPUNIT_ASSERT( 4 && engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
79 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
81 error
= HTTP_STATUS_NONE
;
84 // valid ICY protocol status line
85 input
.append("ICY 200 Okay\n\n", 18);
86 hdr_len
= headersEnd(input
.content(),input
.contentSize());
87 CPPUNIT_ASSERT( engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
88 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
90 error
= HTTP_STATUS_NONE
;
91 /* NP: the engine saves details about the protocol. even when being reset :( */
92 engine
.protoPrefix
="HTTP/";
96 input
.append("\n\n", 2);
97 hdr_len
= headersEnd(input
.content(),input
.contentSize());
98 CPPUNIT_ASSERT( 5 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
99 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
101 error
= HTTP_STATUS_NONE
;
103 input
.append(" \n\n", 8);
104 hdr_len
= headersEnd(input
.content(),input
.contentSize());
105 CPPUNIT_ASSERT( 6 && !engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
106 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
108 error
= HTTP_STATUS_NONE
;
110 // status line with no message
111 input
.append("HTTP/1.1 200\n\n", 14); /* real case seen */
112 hdr_len
= headersEnd(input
.content(),input
.contentSize());
113 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
114 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
116 error
= HTTP_STATUS_NONE
;
118 input
.append("HTTP/1.1 200 \n\n", 15); /* real case seen */
119 hdr_len
= headersEnd(input
.content(),input
.contentSize());
120 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
121 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
123 error
= HTTP_STATUS_NONE
;
125 // incomplete (short) status lines... not sane (yet), but no error either.
126 input
.append("H", 1);
127 hdr_len
= headersEnd(input
.content(),input
.contentSize());
128 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
129 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
131 error
= HTTP_STATUS_NONE
;
133 input
.append("HTTP/", 5);
134 hdr_len
= headersEnd(input
.content(),input
.contentSize());
135 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
136 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
138 error
= HTTP_STATUS_NONE
;
140 input
.append("HTTP/1", 6);
141 hdr_len
= headersEnd(input
.content(),input
.contentSize());
142 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
143 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
145 error
= HTTP_STATUS_NONE
;
147 input
.append("HTTP/1.1", 8);
148 hdr_len
= headersEnd(input
.content(),input
.contentSize());
149 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
150 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
152 error
= HTTP_STATUS_NONE
;
154 input
.append("HTTP/1.1 ", 9); /* real case seen */
155 hdr_len
= headersEnd(input
.content(),input
.contentSize());
156 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
157 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
159 error
= HTTP_STATUS_NONE
;
161 input
.append("HTTP/1.1 20", 14);
162 hdr_len
= headersEnd(input
.content(),input
.contentSize());
163 CPPUNIT_ASSERT(engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
164 CPPUNIT_ASSERT_EQUAL(error
, HTTP_STATUS_NONE
);
166 error
= HTTP_STATUS_NONE
;
168 // status line with no status
169 input
.append("HTTP/1.1 \n\n", 11);
170 hdr_len
= headersEnd(input
.content(),input
.contentSize());
171 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
172 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
174 error
= HTTP_STATUS_NONE
;
176 input
.append("HTTP/1.1 \n\n", 15);
177 hdr_len
= headersEnd(input
.content(),input
.contentSize());
178 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
179 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
181 error
= HTTP_STATUS_NONE
;
183 input
.append("HTTP/1.1 Okay\n\n", 16); /* real case seen */
184 hdr_len
= headersEnd(input
.content(),input
.contentSize());
185 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
186 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
188 error
= HTTP_STATUS_NONE
;
190 // status line with nul-byte
191 input
.append("HTTP/1.1\0200 Okay\n\n", 19); /* real case seen */
192 hdr_len
= headersEnd(input
.content(),input
.contentSize());
193 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
194 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
196 error
= HTTP_STATUS_NONE
;
198 // status line with negative status
199 input
.append("HTTP/1.1 -000\n\n", 15); /* real case seen */
200 hdr_len
= headersEnd(input
.content(),input
.contentSize());
201 CPPUNIT_ASSERT(!engine
.sanityCheckStartLine(&input
, hdr_len
, &error
) );
202 CPPUNIT_ASSERT_EQUAL(error
, HTTP_INVALID_HEADER
);
204 error
= HTTP_STATUS_NONE
;