httpclientsessiontest.cpp
来自「C++ class libraries for network-centric,」· C++ 代码 · 共 308 行
CPP
308 行
//// HTTPClientSessionTest.cpp//// $Id: //poco/1.2/Net/testsuite/src/HTTPClientSessionTest.cpp#1 $//// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.// and Contributors.//// Permission is hereby granted, free of charge, to any person or organization// obtaining a copy of the software and accompanying documentation covered by// this license (the "Software") to use, reproduce, display, distribute,// execute, and transmit the Software, and to prepare derivative works of the// Software, and to permit third-parties to whom the Software is furnished to// do so, all subject to the following:// // The copyright notices in the Software and this entire statement, including// the above license grant, this restriction and the following disclaimer,// must be included in all copies of the Software, in whole or in part, and// all derivative works of the Software, unless such copies or derivative// works are solely in the form of machine-executable object code generated by// a source language processor.// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER// DEALINGS IN THE SOFTWARE.//#include "HTTPClientSessionTest.h"#include "CppUnit/TestCaller.h"#include "CppUnit/TestSuite.h"#include "Poco/Net/HTTPClientSession.h"#include "Poco/Net/HTTPRequest.h"#include "Poco/Net/HTTPResponse.h"#include "Poco/StreamCopier.h"#include "HTTPTestServer.h"#include <istream>#include <ostream>#include <sstream>using Poco::Net::HTTPClientSession;using Poco::Net::HTTPRequest;using Poco::Net::HTTPResponse;using Poco::Net::HTTPMessage;using Poco::StreamCopier;HTTPClientSessionTest::HTTPClientSessionTest(const std::string& name): CppUnit::TestCase(name){}HTTPClientSessionTest::~HTTPClientSessionTest(){}void HTTPClientSessionTest::testGetSmall(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_GET, "/small"); s.sendRequest(request); HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getContentLength() == HTTPTestServer::SMALL_BODY.length()); assert (response.getContentType() == "text/plain"); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == HTTPTestServer::SMALL_BODY);}void HTTPClientSessionTest::testGetLarge(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_GET, "/large"); s.sendRequest(request); HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); assert (response.getContentType() == "text/plain"); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == HTTPTestServer::LARGE_BODY);}void HTTPClientSessionTest::testHead(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large"); s.sendRequest(request); HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); assert (response.getContentType() == "text/plain"); std::ostringstream ostr; assert (StreamCopier::copyStream(rs, ostr) == 0);}void HTTPClientSessionTest::testPostSmallIdentity(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); std::string body("this is a random request body\r\n0\r\n"); request.setContentLength((int) body.length()); s.sendRequest(request) << body; HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getContentLength() == body.length()); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == body);}void HTTPClientSessionTest::testPostLargeIdentity(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); std::string body(8000, 'x'); body.append("\r\n0\r\n"); request.setContentLength((int) body.length()); s.sendRequest(request) << body; HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getContentLength() == body.length()); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == body);}void HTTPClientSessionTest::testPostSmallChunked(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); std::string body("this is a random request body"); request.setChunkedTransferEncoding(true); s.sendRequest(request) << body; HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getChunkedTransferEncoding()); assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == body);}void HTTPClientSessionTest::testPostLargeChunked(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); std::string body(16000, 'x'); request.setChunkedTransferEncoding(true); s.sendRequest(request) << body; HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getChunkedTransferEncoding()); assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == body);}void HTTPClientSessionTest::testPostSmallClose(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); std::string body("this is a random request body"); s.sendRequest(request) << body; HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (!response.getChunkedTransferEncoding()); assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == body);}void HTTPClientSessionTest::testPostLargeClose(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); std::string body(8000, 'x'); s.sendRequest(request) << body; HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (!response.getChunkedTransferEncoding()); assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == body);}void HTTPClientSessionTest::testKeepAlive(){ HTTPTestServer srv; HTTPClientSession s("localhost", srv.port()); s.setKeepAlive(true); HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1); s.sendRequest(request); HTTPResponse response; std::istream& rs1 = s.receiveResponse(response); assert (response.getContentLength() == HTTPTestServer::SMALL_BODY.length()); assert (response.getContentType() == "text/plain"); assert (response.getKeepAlive()); std::ostringstream ostr1; assert (StreamCopier::copyStream(rs1, ostr1) == 0); request.setMethod(HTTPRequest::HTTP_GET); request.setURI("/small"); s.sendRequest(request); std::istream& rs2 = s.receiveResponse(response); assert (response.getContentLength() == HTTPTestServer::SMALL_BODY.length()); assert (response.getKeepAlive()); std::ostringstream ostr2; StreamCopier::copyStream(rs2, ostr2); assert (ostr2.str() == HTTPTestServer::SMALL_BODY); request.setMethod(HTTPRequest::HTTP_GET); request.setURI("/large"); s.sendRequest(request); std::istream& rs3 = s.receiveResponse(response); assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); assert (response.getChunkedTransferEncoding()); assert (response.getKeepAlive()); std::ostringstream ostr3; int n = StreamCopier::copyStream(rs3, ostr3); assert (ostr3.str() == HTTPTestServer::LARGE_BODY); request.setMethod(HTTPRequest::HTTP_HEAD); request.setURI("/large"); s.sendRequest(request); std::istream& rs4= s.receiveResponse(response); assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); assert (response.getContentType() == "text/plain"); assert (!response.getKeepAlive()); std::ostringstream ostr4; assert (StreamCopier::copyStream(rs4, ostr4) == 0);}void HTTPClientSessionTest::testProxy(){ HTTPTestServer srv; HTTPClientSession s("www.somehost.com"); s.setProxy("localhost", srv.port()); HTTPRequest request(HTTPRequest::HTTP_GET, "/large"); s.sendRequest(request); HTTPResponse response; std::istream& rs = s.receiveResponse(response); assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); assert (response.getContentType() == "text/plain"); std::ostringstream ostr; StreamCopier::copyStream(rs, ostr); assert (ostr.str() == HTTPTestServer::LARGE_BODY);}void HTTPClientSessionTest::setUp(){}void HTTPClientSessionTest::tearDown(){}CppUnit::Test* HTTPClientSessionTest::suite(){ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPClientSessionTest"); CppUnit_addTest(pSuite, HTTPClientSessionTest, testGetSmall); CppUnit_addTest(pSuite, HTTPClientSessionTest, testGetLarge); CppUnit_addTest(pSuite, HTTPClientSessionTest, testHead); CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostSmallIdentity); CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostLargeIdentity); CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostSmallChunked); CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostLargeChunked); CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostSmallClose); CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostLargeClose); CppUnit_addTest(pSuite, HTTPClientSessionTest, testKeepAlive); CppUnit_addTest(pSuite, HTTPClientSessionTest, testProxy); return pSuite;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?