2 #include <Spin/Listener.h>
3 #include <Spin/Connector.h>
4 #include <Spin/Details/Request.h>
5 #include <Spin/Handlers/NewConnectionHandler.h>
6 #include <Spin/Handlers/HTTPConnectionHandler.h>
7 #include <Spin/Handlers/HTTPRequestHandler.h>
8 #include <boost/filesystem/path.hpp>
9 #include <boost/filesystem/operations.hpp>
10 #include <loki/ScopeGuard.h>
11 #if defined(_WIN32) && ! defined(__CYGWIN__)
17 #define Sleep(t) sleep((t) / 1000)
20 extern boost::filesystem::path cert_path__
;
28 class NewConnectionHandler
: public ::Spin::Handlers::NewConnectionHandler
31 ::Spin::Connection
getConnection()
33 CPPUNIT_ASSERT(connection_
.get());
34 return ::Spin::Connection(*connection_
);
38 /*virtual */void handleNewConnection(const ::Spin::Connection
& connection
)
40 connection_
.reset(new ::Spin::Connection(connection
));
44 std::auto_ptr
< ::Spin::Connection
> connection_
;
47 class NewConnectionHandler2
: public ::Spin::Handlers::NewConnectionHandler
50 NewConnectionHandler2(::Spin::Listener
& listener
)
54 ::Spin::Connection
getConnection()
56 CPPUNIT_ASSERT(connection_
.get());
57 return ::Spin::Connection(*connection_
);
61 /*virtual */void handleNewConnection(const ::Spin::Connection
& connection
)
63 connection_
.reset(new ::Spin::Connection(connection
));
64 listener_
.clearNewConnectionHandler();
68 ::Spin::Listener
& listener_
;
69 std::auto_ptr
< ::Spin::Connection
> connection_
;
73 CPPUNIT_TEST_SUITE_REGISTRATION(Listener
);
75 void Listener::setUp()
78 void Listener::tearDown()
81 void Listener::tryCreateInstance()
83 ::Spin::Listener
listener(0, 4096);
86 void Listener::tryAccept()
88 ::Spin::Listener
listener(0, 4097);
89 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4097));
90 ::Spin::Connection
accepted_connection(listener
.accept());
91 connection_out
.write("Hello, world!");
92 std::vector
< char > buffer
;
93 std::pair
< std::size_t, int > results(accepted_connection
.read(buffer
));
94 buffer
.resize(results
.first
);
95 CPPUNIT_ASSERT(std::string(buffer
.begin(), buffer
.end()) == "Hello, world!");
98 void Listener::tryAcceptSSL()
100 NewConnectionHandler handler
;
102 CPPUNIT_ASSERT(!cert_path__
.empty());
103 CPPUNIT_ASSERT(boost::filesystem::exists(cert_path__
));
104 ::Spin::Listener
listener(cert_path__
, 0, 4098);
105 listener
.setNewConnectionHandler(handler
);
106 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
107 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4098, true));
108 ::Spin::Connection
accepted_connection(handler
.getConnection());
109 connection_out
.write("Hello, world!");
110 std::vector
< char > buffer
;
111 std::pair
< std::size_t, int > results(accepted_connection
.read(buffer
));
112 buffer
.resize(results
.first
);
113 CPPUNIT_ASSERT(std::string(buffer
.begin(), buffer
.end()) == "Hello, world!");
116 void Listener::tryAsyncAcceptAndDetach()
118 ::Spin::Listener
listener(0, 4099);
119 NewConnectionHandler2
handler(listener
);
120 listener
.setNewConnectionHandler(handler
);
121 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
122 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4099));
124 ::Spin::Connection
accepted_connection(handler
.getConnection());
125 connection_out
.write("Hello, world!");
126 std::vector
< char > buffer
;
127 std::pair
< std::size_t, int > results(accepted_connection
.read(buffer
));
128 buffer
.resize(results
.first
);
129 CPPUNIT_ASSERT(std::string(buffer
.begin(), buffer
.end()) == "Hello, world!");
132 void Listener::tryAcceptWithHTTPHandler01()
134 ::Spin::Listener
listener(0, 4100);
135 ::Spin::Handlers::HTTPRequestHandler request_handler
;
136 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
137 listener
.setNewConnectionHandler(connection_handler
);
138 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
139 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4100));
140 connection_out
.write(
141 "POST / HTTP/1.1\r\n"
142 "Content-Length: 8\r\n"
146 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
147 CPPUNIT_ASSERT(request
->method_
== "POST");
148 CPPUNIT_ASSERT(request
->url_
== "/");
149 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
150 CPPUNIT_ASSERT(request
->body_
.size() == 8);
151 CPPUNIT_ASSERT(std::string(request
->body_
.begin(), request
->body_
.end()) == "01234567");
154 void Listener::tryAcceptWithHTTPHandler02()
156 ::Spin::Listener
listener(0, 4101);
157 ::Spin::Handlers::HTTPRequestHandler request_handler
;
158 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
159 listener
.setNewConnectionHandler(connection_handler
);
160 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
161 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4101));
162 connection_out
.write(
166 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
167 CPPUNIT_ASSERT(request
->method_
== "GET");
168 CPPUNIT_ASSERT(request
->url_
== "/");
169 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
170 CPPUNIT_ASSERT(request
->body_
.empty());
173 void Listener::tryAcceptWithHTTPHandler03()
175 ::Spin::Listener
listener(0, 4102);
176 ::Spin::Handlers::HTTPRequestHandler request_handler
;
177 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
178 listener
.setNewConnectionHandler(connection_handler
);
179 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
180 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4102));
181 connection_out
.write(
182 "GET /index.html HTTP/1.1\r\n"
184 "GET /images/logo.png HTTP/1.1\r\n"
187 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
188 CPPUNIT_ASSERT(request
->method_
== "GET");
189 CPPUNIT_ASSERT(request
->url_
== "/index.html");
190 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
191 CPPUNIT_ASSERT(request
->body_
.empty());
192 request
= request_handler
.getNextRequest();
193 CPPUNIT_ASSERT(request
->method_
== "GET");
194 CPPUNIT_ASSERT(request
->url_
== "/images/logo.png");
195 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
196 CPPUNIT_ASSERT(request
->body_
.empty());
199 void Listener::tryAcceptWithHTTPHandler04()
201 ::Spin::Listener
listener(0, 4103);
202 ::Spin::Handlers::HTTPRequestHandler request_handler
;
203 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
204 listener
.setNewConnectionHandler(connection_handler
);
205 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
206 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4103));
207 connection_out
.write(
208 "GET /index.html HTTP/1.1\r\n"
209 "User-Agent: test\r\n"
210 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
211 "Accept-Language: en-us,en;q=0\r\n"
212 "Accept-Encoding: gzip,deflate\r\n"
213 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
214 "Keep-Alive: 300\r\n"
215 "Connection: keep-alive\r\n"
218 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
219 CPPUNIT_ASSERT(request
->method_
== "GET");
220 CPPUNIT_ASSERT(request
->url_
== "/index.html");
221 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
222 CPPUNIT_ASSERT(request
->body_
.empty());
223 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
224 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
225 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
226 CPPUNIT_ASSERT(where
->value_
== "test");
228 CPPUNIT_ASSERT(where
->name_
== "Accept");
229 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
231 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
232 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
234 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
235 CPPUNIT_ASSERT(where
->value_
== "gzip,deflate");
237 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
238 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
240 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
241 CPPUNIT_ASSERT(where
->value_
== "300");
243 CPPUNIT_ASSERT(where
->name_
== "Connection");
244 CPPUNIT_ASSERT(where
->value_
== "keep-alive");
248 void Listener::tryAcceptWithHTTPHandler05()
250 ::Spin::Listener
listener(0, 4104);
251 ::Spin::Handlers::HTTPRequestHandler request_handler
;
252 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
253 listener
.setNewConnectionHandler(connection_handler
);
254 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
255 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4104));
256 connection_out
.write(
257 "GET /index.html HTTP/1.1\r\n"
258 "User-Agent: test\r\n"
259 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
260 "Accept-Language: en-us,en;q=0\r\n"
261 "Accept-Encoding: gzip,deflate\r\n"
264 connection_out
.write(
265 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
266 "Keep-Alive: 300\r\n"
267 "Connection: keep-alive\r\n"
270 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
271 CPPUNIT_ASSERT(request
->method_
== "GET");
272 CPPUNIT_ASSERT(request
->url_
== "/index.html");
273 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
274 CPPUNIT_ASSERT(request
->body_
.empty());
275 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
276 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
277 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
278 CPPUNIT_ASSERT(where
->value_
== "test");
280 CPPUNIT_ASSERT(where
->name_
== "Accept");
281 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
283 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
284 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
286 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
287 CPPUNIT_ASSERT(where
->value_
== "gzip,deflate");
289 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
290 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
292 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
293 CPPUNIT_ASSERT(where
->value_
== "300");
295 CPPUNIT_ASSERT(where
->name_
== "Connection");
296 CPPUNIT_ASSERT(where
->value_
== "keep-alive");
300 void Listener::tryAcceptWithHTTPHandler06()
302 ::Spin::Listener
listener(0, 4105);
303 ::Spin::Handlers::HTTPRequestHandler request_handler
;
304 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
305 listener
.setNewConnectionHandler(connection_handler
);
306 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
307 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4105));
308 connection_out
.write(
309 "GET /index.html HTTP/1.1\r\n"
310 "User-Agent: test\r\n"
311 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
312 "Accept-Language: en-us,en;q=0\r\n"
313 "Accept-Encoding: gzip,deflate"
316 connection_out
.write(
318 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
319 "Keep-Alive: 300\r\n"
320 "Connection: keep-alive\r\n"
323 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
324 CPPUNIT_ASSERT(request
->method_
== "GET");
325 CPPUNIT_ASSERT(request
->url_
== "/index.html");
326 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
327 CPPUNIT_ASSERT(request
->body_
.empty());
328 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
329 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
330 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
331 CPPUNIT_ASSERT(where
->value_
== "test");
333 CPPUNIT_ASSERT(where
->name_
== "Accept");
334 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
336 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
337 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
339 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
340 CPPUNIT_ASSERT(where
->value_
== "gzip,deflate");
342 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
343 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
345 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
346 CPPUNIT_ASSERT(where
->value_
== "300");
348 CPPUNIT_ASSERT(where
->name_
== "Connection");
349 CPPUNIT_ASSERT(where
->value_
== "keep-alive");
353 void Listener::tryAcceptWithHTTPHandler07()
355 ::Spin::Listener
listener(0, 4106);
356 ::Spin::Handlers::HTTPRequestHandler request_handler
;
357 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
358 listener
.setNewConnectionHandler(connection_handler
);
359 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
360 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4106));
361 connection_out
.write(
362 "GET /index.html HTTP/1.1\r\n"
363 "User-Agent: test\r\n"
364 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
365 "Accept-Language: en-us,en;q=0\r\n"
366 "Accept-Encoding: gzip,"
369 connection_out
.write(
371 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
372 "Keep-Alive: 300\r\n"
373 "Connection: keep-alive\r\n"
376 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
377 CPPUNIT_ASSERT(request
->method_
== "GET");
378 CPPUNIT_ASSERT(request
->url_
== "/index.html");
379 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
380 CPPUNIT_ASSERT(request
->body_
.empty());
381 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
382 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
383 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
384 CPPUNIT_ASSERT(where
->value_
== "test");
386 CPPUNIT_ASSERT(where
->name_
== "Accept");
387 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
389 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
390 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
392 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
393 CPPUNIT_ASSERT(where
->value_
== "gzip,deflate");
395 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
396 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
398 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
399 CPPUNIT_ASSERT(where
->value_
== "300");
401 CPPUNIT_ASSERT(where
->name_
== "Connection");
402 CPPUNIT_ASSERT(where
->value_
== "keep-alive");
406 void Listener::tryAcceptWithHTTPHandler08()
408 ::Spin::Listener
listener(0, 4107);
409 ::Spin::Handlers::HTTPRequestHandler request_handler
;
410 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
411 listener
.setNewConnectionHandler(connection_handler
);
412 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
413 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4107));
414 connection_out
.write(
415 "GET /index.html HTTP/1.1\r\n"
416 "User-Agent: test\r\n"
417 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
418 "Accept-Language: en-us,en;q=0\r\n"
419 "Accept-Encoding: gzip,\r\n"
422 connection_out
.write(
424 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
425 "Keep-Alive: 300\r\n"
426 "Connection: keep-alive\r\n"
429 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
430 CPPUNIT_ASSERT(request
->method_
== "GET");
431 CPPUNIT_ASSERT(request
->url_
== "/index.html");
432 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
433 CPPUNIT_ASSERT(request
->body_
.empty());
434 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
435 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
436 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
437 CPPUNIT_ASSERT(where
->value_
== "test");
439 CPPUNIT_ASSERT(where
->name_
== "Accept");
440 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
442 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
443 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
445 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
446 CPPUNIT_ASSERT(where
->value_
== "gzip,\r\n\tdeflate");
448 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
449 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
451 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
452 CPPUNIT_ASSERT(where
->value_
== "300");
454 CPPUNIT_ASSERT(where
->name_
== "Connection");
455 CPPUNIT_ASSERT(where
->value_
== "keep-alive");
459 void Listener::tryAcceptWithHTTPHandler09()
461 ::Spin::Listener
listener(0, 4107);
462 ::Spin::Handlers::HTTPRequestHandler request_handler
;
463 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
464 listener
.setNewConnectionHandler(connection_handler
);
465 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
466 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4107));
467 connection_out
.write(
468 "GET /index.html HTTP/1.1\r\n"
469 "User-Agent: test\r\n"
470 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
471 "Accept-Language: en-us,en;q=0\r\n"
472 "Accept-Encoding: gzip,\r\n"
474 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
475 "Keep-Alive: 300\r\n"
476 "Connection: keep-alive\r\n"
479 connection_out
.write(
482 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
483 CPPUNIT_ASSERT(request
->method_
== "GET");
484 CPPUNIT_ASSERT(request
->url_
== "/index.html");
485 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
486 CPPUNIT_ASSERT(request
->body_
.empty());
487 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
488 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
489 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
490 CPPUNIT_ASSERT(where
->value_
== "test");
492 CPPUNIT_ASSERT(where
->name_
== "Accept");
493 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
495 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
496 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
498 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
499 CPPUNIT_ASSERT(where
->value_
== "gzip,\r\n\tdeflate");
501 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
502 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
504 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
505 CPPUNIT_ASSERT(where
->value_
== "300");
507 CPPUNIT_ASSERT(where
->name_
== "Connection");
508 CPPUNIT_ASSERT(where
->value_
== "keep-alive");
512 void Listener::tryAcceptWithHTTPHandler10()
514 ::Spin::Listener
listener(0, 4108);
515 ::Spin::Handlers::HTTPRequestHandler request_handler
;
516 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
517 listener
.setNewConnectionHandler(connection_handler
);
518 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
519 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4108));
520 connection_out
.write(
521 "GET /index.html HTTP/1.1"
524 connection_out
.write(
526 "User-Agent: test\r\n"
527 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
528 "Accept-Language: en-us,en;q=0\r\n"
529 "Accept-Encoding: gzip,\r\n"
531 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
532 "Keep-Alive: 300\r\n"
533 "Connection: keep-alive\r\n"
536 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
537 CPPUNIT_ASSERT(request
->method_
== "GET");
538 CPPUNIT_ASSERT(request
->url_
== "/index.html");
539 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
540 CPPUNIT_ASSERT(request
->body_
.empty());
541 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
542 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
543 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
544 CPPUNIT_ASSERT(where
->value_
== "test");
546 CPPUNIT_ASSERT(where
->name_
== "Accept");
547 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
549 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
550 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
552 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
553 CPPUNIT_ASSERT(where
->value_
== "gzip,\r\n\tdeflate");
555 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
556 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
558 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
559 CPPUNIT_ASSERT(where
->value_
== "300");
561 CPPUNIT_ASSERT(where
->name_
== "Connection");
562 CPPUNIT_ASSERT(where
->value_
== "keep-alive");
566 void Listener::tryAcceptWithHTTPHandler11()
568 ::Spin::Listener
listener(0, 4109);
569 ::Spin::Handlers::HTTPRequestHandler request_handler
;
570 ::Spin::Handlers::HTTPConnectionHandler
connection_handler(request_handler
);
571 listener
.setNewConnectionHandler(connection_handler
);
572 Loki::ScopeGuard attachment_handler
= Loki::MakeObjGuard(listener
, &::Spin::Listener::clearNewConnectionHandler
);
573 ::Spin::Connection
connection_out(::Spin::Connector::getInstance().connect("127.0.0.1", 4109));
574 connection_out
.write(
578 connection_out
.write(
582 connection_out
.write(
586 connection_out
.write(
588 "User-Agent: test\r\n"
589 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
590 "Accept-Language: en-us,en;q=0\r\n"
591 "Accept-Encoding: gzip,\r\n"
593 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
594 "Keep-Alive: 300\r\n"
595 "Connection: keep-alive\r\n"
598 boost::shared_ptr
< ::Spin::Details::Request
> request(request_handler
.getNextRequest());
599 CPPUNIT_ASSERT(request
->method_
== "GET");
600 CPPUNIT_ASSERT(request
->url_
== "/index.html");
601 CPPUNIT_ASSERT(request
->protocol_and_version_
== "HTTP/1.1");
602 CPPUNIT_ASSERT(request
->body_
.empty());
603 CPPUNIT_ASSERT(request
->header_fields_
.size() == 7);
604 ::Spin::Details::Request::HeaderFields::const_iterator
where(request
->header_fields_
.begin());
605 CPPUNIT_ASSERT(where
->name_
== "User-Agent");
606 CPPUNIT_ASSERT(where
->value_
== "test");
608 CPPUNIT_ASSERT(where
->name_
== "Accept");
609 CPPUNIT_ASSERT(where
->value_
== "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
611 CPPUNIT_ASSERT(where
->name_
== "Accept-Language");
612 CPPUNIT_ASSERT(where
->value_
== "en-us,en;q=0");
614 CPPUNIT_ASSERT(where
->name_
== "Accept-Encoding");
615 CPPUNIT_ASSERT(where
->value_
== "gzip,\r\n\tdeflate");
617 CPPUNIT_ASSERT(where
->name_
== "Accept-Charset");
618 CPPUNIT_ASSERT(where
->value_
== "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
620 CPPUNIT_ASSERT(where
->name_
== "Keep-Alive");
621 CPPUNIT_ASSERT(where
->value_
== "300");
623 CPPUNIT_ASSERT(where
->name_
== "Connection");
624 CPPUNIT_ASSERT(where
->value_
== "keep-alive");