123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- #include "HttpResponse.h"
- #include <iostream>
- #include <cppunit/extensions/HelperMacros.h>
- #include "TestUtil.h"
- #include "prefs.h"
- #include "PiecedSegment.h"
- #include "Piece.h"
- #include "Request.h"
- #include "HttpHeader.h"
- #include "HttpRequest.h"
- #include "Exception.h"
- #include "A2STR.h"
- #include "DlRetryEx.h"
- #include "CookieStorage.h"
- #include "AuthConfigFactory.h"
- #include "AuthConfig.h"
- #include "StreamFilter.h"
- #include "MetalinkHttpEntry.h"
- #include "Option.h"
- #include "Checksum.h"
- namespace aria2 {
- class HttpResponseTest : public CppUnit::TestFixture {
- CPPUNIT_TEST_SUITE(HttpResponseTest);
- CPPUNIT_TEST(testGetContentLength_null);
- CPPUNIT_TEST(testGetContentLength_contentLength);
- // CPPUNIT_TEST(testGetContentLength_range);
- CPPUNIT_TEST(testGetEntityLength);
- CPPUNIT_TEST(testGetContentType);
- CPPUNIT_TEST(testDetermineFilename_without_ContentDisposition);
- CPPUNIT_TEST(testDetermineFilename_with_ContentDisposition_zero_length);
- CPPUNIT_TEST(testDetermineFilename_with_ContentDisposition);
- CPPUNIT_TEST(testGetRedirectURI_without_Location);
- CPPUNIT_TEST(testGetRedirectURI_with_Location);
- CPPUNIT_TEST(testIsRedirect);
- CPPUNIT_TEST(testIsTransferEncodingSpecified);
- CPPUNIT_TEST(testGetTransferEncoding);
- CPPUNIT_TEST(testGetTransferEncodingStreamFilter);
- CPPUNIT_TEST(testIsContentEncodingSpecified);
- CPPUNIT_TEST(testGetContentEncoding);
- CPPUNIT_TEST(testGetContentEncodingStreamFilter);
- CPPUNIT_TEST(testValidateResponse);
- CPPUNIT_TEST(testValidateResponse_good_range);
- CPPUNIT_TEST(testValidateResponse_bad_range);
- CPPUNIT_TEST(testValidateResponse_chunked);
- CPPUNIT_TEST(testValidateResponse_withIfModifiedSince);
- CPPUNIT_TEST(testProcessRedirect);
- CPPUNIT_TEST(testRetrieveCookie);
- CPPUNIT_TEST(testSupportsPersistentConnection);
- CPPUNIT_TEST(testGetMetalinKHttpEntries);
- CPPUNIT_TEST(testGetDigest);
- CPPUNIT_TEST_SUITE_END();
- private:
- public:
- void setUp() {}
- void testGetContentLength_null();
- void testGetContentLength_contentLength();
- void testGetEntityLength();
- void testGetContentType();
- void testDetermineFilename_without_ContentDisposition();
- void testDetermineFilename_with_ContentDisposition_zero_length();
- void testDetermineFilename_with_ContentDisposition();
- void testGetRedirectURI_without_Location();
- void testGetRedirectURI_with_Location();
- void testIsRedirect();
- void testIsTransferEncodingSpecified();
- void testGetTransferEncoding();
- void testGetTransferEncodingStreamFilter();
- void testIsContentEncodingSpecified();
- void testGetContentEncoding();
- void testGetContentEncodingStreamFilter();
- void testValidateResponse();
- void testValidateResponse_good_range();
- void testValidateResponse_bad_range();
- void testValidateResponse_chunked();
- void testValidateResponse_withIfModifiedSince();
- void testProcessRedirect();
- void testRetrieveCookie();
- void testSupportsPersistentConnection();
- void testGetMetalinKHttpEntries();
- void testGetDigest();
- };
- CPPUNIT_TEST_SUITE_REGISTRATION(HttpResponseTest);
- void HttpResponseTest::testGetContentLength_null()
- {
- HttpResponse httpResponse;
- CPPUNIT_ASSERT_EQUAL((int64_t)0LL, httpResponse.getContentLength());
- }
- void HttpResponseTest::testGetContentLength_contentLength()
- {
- HttpResponse httpResponse;
- auto httpHeader = make_unique<HttpHeader>();
- httpHeader->put(HttpHeader::CONTENT_LENGTH, "4294967296");
- httpResponse.setHttpHeader(std::move(httpHeader));
- CPPUNIT_ASSERT_EQUAL((int64_t)4294967296LL, httpResponse.getContentLength());
- }
- void HttpResponseTest::testGetEntityLength()
- {
- HttpResponse httpResponse;
- auto httpHeader = make_unique<HttpHeader>();
- httpHeader->put(HttpHeader::CONTENT_LENGTH, "4294967296");
- httpResponse.setHttpHeader(std::move(httpHeader));
- CPPUNIT_ASSERT_EQUAL((int64_t)4294967296LL, httpResponse.getEntityLength());
- httpResponse.getHttpHeader()->put(HttpHeader::CONTENT_RANGE,
- "bytes 1-4294967296/4294967297");
- CPPUNIT_ASSERT_EQUAL((int64_t)4294967297LL, httpResponse.getEntityLength());
- }
- void HttpResponseTest::testGetContentType()
- {
- HttpResponse httpResponse;
- auto httpHeader = make_unique<HttpHeader>();
- httpHeader->put(HttpHeader::CONTENT_TYPE,
- "application/metalink+xml; charset=UTF-8");
- httpResponse.setHttpHeader(std::move(httpHeader));
- // See parameter is ignored.
- CPPUNIT_ASSERT_EQUAL(std::string("application/metalink+xml"),
- httpResponse.getContentType());
- }
- void HttpResponseTest::testDetermineFilename_without_ContentDisposition()
- {
- HttpResponse httpResponse;
- auto httpRequest = make_unique<HttpRequest>();
- auto request = std::make_shared<Request>();
- request->setUri("http://localhost/archives/aria2-1.0.0.tar.bz2");
- httpRequest->setRequest(request);
- httpResponse.setHttpHeader(make_unique<HttpHeader>());
- httpResponse.setHttpRequest(std::move(httpRequest));
- CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"),
- httpResponse.determineFilename(false));
- }
- void HttpResponseTest::
- testDetermineFilename_with_ContentDisposition_zero_length()
- {
- HttpResponse httpResponse;
- auto httpHeader = make_unique<HttpHeader>();
- httpHeader->put(HttpHeader::CONTENT_DISPOSITION, "attachment; filename=\"\"");
- auto httpRequest = make_unique<HttpRequest>();
- auto request = std::make_shared<Request>();
- request->setUri("http://localhost/archives/aria2-1.0.0.tar.bz2");
- httpRequest->setRequest(request);
- httpResponse.setHttpHeader(std::move(httpHeader));
- httpResponse.setHttpRequest(std::move(httpRequest));
- CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"),
- httpResponse.determineFilename(false));
- }
- void HttpResponseTest::testDetermineFilename_with_ContentDisposition()
- {
- HttpResponse httpResponse;
- auto httpHeader = make_unique<HttpHeader>();
- httpHeader->put(HttpHeader::CONTENT_DISPOSITION,
- "attachment; filename=\"aria2-current.tar.bz2\"");
- auto httpRequest = make_unique<HttpRequest>();
- auto request = std::make_shared<Request>();
- request->setUri("http://localhost/archives/aria2-1.0.0.tar.bz2");
- httpRequest->setRequest(request);
- httpResponse.setHttpHeader(std::move(httpHeader));
- httpResponse.setHttpRequest(std::move(httpRequest));
- CPPUNIT_ASSERT_EQUAL(std::string("aria2-current.tar.bz2"),
- httpResponse.determineFilename(false));
- }
- void HttpResponseTest::testGetRedirectURI_without_Location()
- {
- HttpResponse httpResponse;
- httpResponse.setHttpHeader(make_unique<HttpHeader>());
- CPPUNIT_ASSERT_EQUAL(std::string(""), httpResponse.getRedirectURI());
- }
- void HttpResponseTest::testGetRedirectURI_with_Location()
- {
- HttpResponse httpResponse;
- auto httpHeader = make_unique<HttpHeader>();
- httpHeader->put(HttpHeader::LOCATION,
- "http://localhost/download/aria2-1.0.0.tar.bz2");
- httpResponse.setHttpHeader(std::move(httpHeader));
- CPPUNIT_ASSERT_EQUAL(
- std::string("http://localhost/download/aria2-1.0.0.tar.bz2"),
- httpResponse.getRedirectURI());
- }
- void HttpResponseTest::testIsRedirect()
- {
- HttpResponse httpResponse;
- httpResponse.setHttpHeader(make_unique<HttpHeader>());
- httpResponse.getHttpHeader()->setStatusCode(301);
- CPPUNIT_ASSERT(!httpResponse.isRedirect());
- httpResponse.getHttpHeader()->setStatusCode(200);
- CPPUNIT_ASSERT(!httpResponse.isRedirect());
- httpResponse.getHttpHeader()->put(
- HttpHeader::LOCATION, "http://localhost/download/aria2-1.0.0.tar.bz2");
- CPPUNIT_ASSERT(!httpResponse.isRedirect());
- httpResponse.getHttpHeader()->setStatusCode(300);
- CPPUNIT_ASSERT(httpResponse.isRedirect());
- httpResponse.getHttpHeader()->setStatusCode(301);
- CPPUNIT_ASSERT(httpResponse.isRedirect());
- httpResponse.getHttpHeader()->setStatusCode(302);
- CPPUNIT_ASSERT(httpResponse.isRedirect());
- httpResponse.getHttpHeader()->setStatusCode(303);
- CPPUNIT_ASSERT(httpResponse.isRedirect());
- httpResponse.getHttpHeader()->setStatusCode(304);
- CPPUNIT_ASSERT(!httpResponse.isRedirect());
- httpResponse.getHttpHeader()->setStatusCode(305);
- CPPUNIT_ASSERT(!httpResponse.isRedirect());
- httpResp
|