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 + -
显示快捷键?