| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 | #include "Request.h"#include <cppunit/extensions/HelperMacros.h>#include "Netrc.h"#include "DefaultAuthResolver.h"#include "NetrcAuthResolver.h"#include "uri.h"namespace aria2 {class RequestTest : public CppUnit::TestFixture {  CPPUNIT_TEST_SUITE(RequestTest);  CPPUNIT_TEST(testSetUri1);  CPPUNIT_TEST(testSetUri2);  CPPUNIT_TEST(testSetUri7);  CPPUNIT_TEST(testSetUri_supportsPersistentConnection);  CPPUNIT_TEST(testRedirectUri);  CPPUNIT_TEST(testRedirectUri2);  CPPUNIT_TEST(testRedirectUri_supportsPersistentConnection);  CPPUNIT_TEST(testRedirectUri_uriNormalization);  CPPUNIT_TEST(testResetUri);  CPPUNIT_TEST(testResetUri_supportsPersistentConnection);  CPPUNIT_TEST(testInnerLink);  CPPUNIT_TEST(testInnerLinkInReferer);  CPPUNIT_TEST(testGetURIHost);  CPPUNIT_TEST_SUITE_END();public:  void testSetUri1();  void testSetUri2();  void testSetUri7();  void testSetUri_supportsPersistentConnection();  void testRedirectUri();  void testRedirectUri2();  void testRedirectUri_supportsPersistentConnection();  void testRedirectUri_uriNormalization();  void testResetUri();  void testResetUri_supportsPersistentConnection();  void testInnerLink();  void testInnerLinkInReferer();  void testGetURIHost();};CPPUNIT_TEST_SUITE_REGISTRATION(RequestTest);void RequestTest::testSetUri1(){  Request req;  bool v = req.setUri("http://aria.rednoah.com/");  CPPUNIT_ASSERT(v);  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/"), req.getUri());  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/"),                       req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getReferer());  CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());  CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());  CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());  CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());  CPPUNIT_ASSERT(!req.isIPv6LiteralAddress());}void RequestTest::testSetUri2(){  Request req;  bool v = req.setUri("http://aria.rednoah.com:8080/index.html");  req.setReferer("http://aria.rednoah.com:8080");  CPPUNIT_ASSERT(v);  // referer is unchaged  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080"),                       req.getReferer());  CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());  CPPUNIT_ASSERT_EQUAL((uint16_t)8080, req.getPort());  CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());  CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());  CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());}void RequestTest::testSetUri7(){  Request req;  bool v = req.setUri("http://");  CPPUNIT_ASSERT(!v);}void RequestTest::testRedirectUri(){  Request req;  req.supportsPersistentConnection(false);  req.setUri("http://aria.rednoah.com:8080/aria2/index.html");  // See port number is preserved.  CPPUNIT_ASSERT(req.redirectUri("/foo"));  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080/foo"),                       req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(1, req.getRedirectCount());  CPPUNIT_ASSERT(req.redirectUri("http://aria.rednoah.co.jp/"));  // persistent connection flag is set to be true after redirection  CPPUNIT_ASSERT(req.supportsPersistentConnection());  // uri must be the same  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080/aria2/"                                   "index.html"),                       req.getUri());  // currentUri must be updated  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.co.jp/"),                       req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());  CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.co.jp"), req.getHost());  CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());  CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());  // See redirect count is incremented.  CPPUNIT_ASSERT_EQUAL(2, req.getRedirectCount());  // Give abosulute path  CPPUNIT_ASSERT(req.redirectUri("/abspath/to/file"));  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.co.jp/abspath/to/file"),                       req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(3, req.getRedirectCount());  // Give relative path  CPPUNIT_ASSERT(req.redirectUri("relativepath/to/file"));  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.co.jp/abspath/to/"                                   "relativepath/to/file"),                       req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(4, req.getRedirectCount());  // Give network-path reference  CPPUNIT_ASSERT(req.redirectUri("//host/to/file"));  CPPUNIT_ASSERT_EQUAL(std::string("http://host/to/file"), req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(5, req.getRedirectCount());  // http:// in query part  CPPUNIT_ASSERT(req.redirectUri("/abspath?uri=http://foo"));  CPPUNIT_ASSERT_EQUAL(std::string("http://host/abspath?uri=http://foo"),                       req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(6, req.getRedirectCount());}void RequestTest::testRedirectUri2(){  Request req;  req.setUri("http://aria.rednoah.com/download.html");  req.setReferer("http://aria.rednoah.com/");  req.redirectUri("http://aria.rednoah.com/403.html");  // referer must not be changed in redirection  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/"),                       req.getReferer());}void RequestTest::testResetUri(){  Request req;  req.setUri("http://aria.rednoah.com:8080/aria2/index.html");  req.setReferer("http://aria.rednoah.com:8080/");  req.redirectUri("ftp://aria.rednoah.co.jp/index_en.html?view=wide");  bool v3 = req.resetUri();  CPPUNIT_ASSERT(v3);  // currentUri must equal to uri  CPPUNIT_ASSERT_EQUAL(      std::string("http://aria.rednoah.com:8080/aria2/index.html"),      req.getUri());  CPPUNIT_ASSERT_EQUAL(req.getUri(), req.getCurrentUri());  // referer is unchanged  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080/"),                       req.getReferer());  CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());  CPPUNIT_ASSERT_EQUAL((uint16_t)8080, req.getPort());  CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());  CPPUNIT_ASSERT_EQUAL(std::string("/aria2/"), req.getDir());  CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());}void RequestTest::testInnerLink(){  Request req;  bool v = req.setUri("http://aria.rednoah.com/index.html#download");  CPPUNIT_ASSERT(v);  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/index.html"                                   "#download"),                       req.getUri());  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/index.html"),                       req.getCurrentUri());  CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());}void RequestTest::testInnerLinkInReferer(){  Request req;  req.setReferer("http://aria.rednoah.com/home.html#top");  CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/home.html"),                       req.getReferer());}void RequestTest::testSetUri_supportsPersistentConnection(){  Request req;  CPPUNIT_ASSERT(req.setUri("http://host/file"));  req.supportsPersistentConnection(false);  CPPUNIT_ASSERT(!req.supportsPersistentConnection());  req.setUri("http://host/file");  CPPUNIT_ASSERT(req.supportsPersistentConnection());}void RequestTest::testResetUri_supportsPersistentConnection(){  Request req;  CPPUNIT_ASSERT(req.setUri("http://host/file"));  req.supportsPersistentConnection(false);  CPPUNIT_ASSERT(!req.supportsPersistentConnection());  req.resetUri();  CPPUNIT_ASSERT(req.supportsPersistentConnection());}void RequestTest::testRedirectUri_supportsPersistentConnection(){  Request req;  CPPUNIT_ASSERT(req.setUri("http://host/file"));  req.supportsPersistentConnection(false);  CPPUNIT_ASSERT(!req.supportsPersistentConnection());  req.redirectUri("http://host/file");  CPPUNIT_ASSERT(req.supportsPersistentConnection());}void RequestTest::testRedirectUri_uriNormalization(){  Request req;  CPPUNIT_ASSERT(req.setUri("http://host/file?a"));  CPPUNIT_ASSERT(req.redirectUri("/redir1"));  CPPUNIT_ASSERT_EQUAL(std::string("http://host/redir1"), req.getCurrentUri());  CPPUNIT_ASSERT(req.redirectUri("/redir2?b"));  CPPUNIT_ASSERT_EQUAL(std::string("http://host/redir2?b"),                       req.getCurrentUri());  CPPUNIT_ASSERT(req.redirectUri("/redir3?c#d"));  CPPUNIT_ASSERT_EQUAL(std::string("http://host/redir3?c"),                       req.getCurrentUri());  CPPUNIT_ASSERT(req.redirectUri("/redir4/gone/.././2nd/foo?a"));  CPPUNIT_ASSERT_EQUAL(std::string("http://host/redir4/2nd/foo?a"),                       req.getCurrentUri());  CPPUNIT_ASSERT(req.redirectUri("../new2nd/bar?b"));  CPPUNIT_ASSERT_EQUAL(std::string("http://host/redir4/new2nd/bar?b"),                       req.getCurrentUri());}void RequestTest::testGetURIHost(){  Request req;  CPPUNIT_ASSERT(req.setUri("http://[::1]"));  CPPUNIT_ASSERT_EQUAL(std::string("[::1]"), req.getURIHost());}} // namespace aria2
 |