RequestTest.cc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. #include "Request.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "Netrc.h"
  4. #include "DefaultAuthResolver.h"
  5. #include "NetrcAuthResolver.h"
  6. namespace aria2 {
  7. class RequestTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(RequestTest);
  9. CPPUNIT_TEST(testSetUrl1);
  10. CPPUNIT_TEST(testSetUrl2);
  11. CPPUNIT_TEST(testSetUrl3);
  12. CPPUNIT_TEST(testSetUrl4);
  13. CPPUNIT_TEST(testSetUrl5);
  14. CPPUNIT_TEST(testSetUrl6);
  15. CPPUNIT_TEST(testSetUrl7);
  16. CPPUNIT_TEST(testSetUrl8);
  17. CPPUNIT_TEST(testSetUrl9);
  18. CPPUNIT_TEST(testSetUrl10);
  19. CPPUNIT_TEST(testSetUrl11);
  20. CPPUNIT_TEST(testSetUrl12);
  21. CPPUNIT_TEST(testSetUrl13);
  22. CPPUNIT_TEST(testSetUrl14);
  23. CPPUNIT_TEST(testSetUrl15);
  24. CPPUNIT_TEST(testSetUrl16);
  25. CPPUNIT_TEST(testSetUrl17);
  26. CPPUNIT_TEST(testSetUrl18);
  27. CPPUNIT_TEST(testSetUrl19);
  28. CPPUNIT_TEST(testSetUrl20);
  29. CPPUNIT_TEST(testSetUrl_username);
  30. CPPUNIT_TEST(testSetUrl_usernamePassword);
  31. CPPUNIT_TEST(testSetUrl_zeroUsername);
  32. CPPUNIT_TEST(testSetUrl_supportsPersistentConnection);
  33. CPPUNIT_TEST(testSetUrl_ipv6);
  34. CPPUNIT_TEST(testRedirectUrl);
  35. CPPUNIT_TEST(testRedirectUrl2);
  36. CPPUNIT_TEST(testRedirectUrl_supportsPersistentConnection);
  37. CPPUNIT_TEST(testResetUrl);
  38. CPPUNIT_TEST(testResetUrl_supportsPersistentConnection);
  39. CPPUNIT_TEST(testInnerLink);
  40. CPPUNIT_TEST(testInnerLinkInReferer);
  41. CPPUNIT_TEST(testGetURIHost);
  42. CPPUNIT_TEST_SUITE_END();
  43. public:
  44. void testSetUrl1();
  45. void testSetUrl2();
  46. void testSetUrl3();
  47. void testSetUrl4();
  48. void testSetUrl5();
  49. void testSetUrl6();
  50. void testSetUrl7();
  51. void testSetUrl8();
  52. void testSetUrl9();
  53. void testSetUrl10();
  54. void testSetUrl11();
  55. void testSetUrl12();
  56. void testSetUrl13();
  57. void testSetUrl14();
  58. void testSetUrl15();
  59. void testSetUrl16();
  60. void testSetUrl17();
  61. void testSetUrl18();
  62. void testSetUrl19();
  63. void testSetUrl20();
  64. void testSetUrl_username();
  65. void testSetUrl_usernamePassword();
  66. void testSetUrl_zeroUsername();
  67. void testSetUrl_supportsPersistentConnection();
  68. void testSetUrl_ipv6();
  69. void testRedirectUrl();
  70. void testRedirectUrl2();
  71. void testRedirectUrl_supportsPersistentConnection();
  72. void testResetUrl();
  73. void testResetUrl_supportsPersistentConnection();
  74. void testInnerLink();
  75. void testInnerLinkInReferer();
  76. void testGetURIHost();
  77. };
  78. CPPUNIT_TEST_SUITE_REGISTRATION( RequestTest );
  79. void RequestTest::testSetUrl1() {
  80. Request req;
  81. bool v = req.setUrl("http://aria.rednoah.com/");
  82. CPPUNIT_ASSERT(v);
  83. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/"), req.getUrl());
  84. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/"), req.getCurrentUrl());
  85. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPreviousUrl());
  86. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  87. CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());
  88. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
  89. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  90. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
  91. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  92. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
  93. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
  94. CPPUNIT_ASSERT(!req.isIPv6LiteralAddress());
  95. }
  96. void RequestTest::testSetUrl2() {
  97. Request req;
  98. bool v = req.setUrl("http://aria.rednoah.com:8080/index.html");
  99. req.setReferer("http://aria.rednoah.com:8080");
  100. CPPUNIT_ASSERT(v);
  101. // referer is unchaged
  102. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080"), req.getReferer());
  103. // previousUrl must equal to referer;
  104. CPPUNIT_ASSERT_EQUAL(req.getReferer(), req.getPreviousUrl());
  105. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  106. CPPUNIT_ASSERT_EQUAL((uint16_t)8080, req.getPort());
  107. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
  108. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  109. CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
  110. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  111. }
  112. void RequestTest::testSetUrl3() {
  113. Request req;
  114. bool v = req.setUrl("http://aria.rednoah.com/aria2/index.html");
  115. CPPUNIT_ASSERT(v);
  116. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  117. CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());
  118. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
  119. CPPUNIT_ASSERT_EQUAL(std::string("/aria2"), req.getDir());
  120. CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
  121. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  122. }
  123. void RequestTest::testSetUrl4() {
  124. Request req;
  125. bool v = req.setUrl("http://aria.rednoah.com/aria2/aria3/index.html");
  126. CPPUNIT_ASSERT(v);
  127. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  128. CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());
  129. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
  130. CPPUNIT_ASSERT_EQUAL(std::string("/aria2/aria3"), req.getDir());
  131. CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
  132. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  133. }
  134. void RequestTest::testSetUrl5() {
  135. Request req;
  136. bool v = req.setUrl("http://aria.rednoah.com/aria2/aria3/");
  137. CPPUNIT_ASSERT(v);
  138. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  139. CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());
  140. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
  141. CPPUNIT_ASSERT_EQUAL(std::string("/aria2/aria3"), req.getDir());
  142. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
  143. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  144. }
  145. void RequestTest::testSetUrl6() {
  146. Request req;
  147. bool v = req.setUrl("http://aria.rednoah.com/aria2/aria3");
  148. CPPUNIT_ASSERT(v);
  149. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  150. CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());
  151. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
  152. CPPUNIT_ASSERT_EQUAL(std::string("/aria2"), req.getDir());
  153. CPPUNIT_ASSERT_EQUAL(std::string("aria3"), req.getFile());
  154. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  155. }
  156. void RequestTest::testSetUrl7() {
  157. Request req;
  158. bool v = req.setUrl("http://");
  159. CPPUNIT_ASSERT(!v);
  160. }
  161. void RequestTest::testSetUrl8() {
  162. Request req;
  163. bool v = req.setUrl("http:/aria.rednoah.com");
  164. CPPUNIT_ASSERT(!v);
  165. }
  166. void RequestTest::testSetUrl9() {
  167. Request req;
  168. bool v = req.setUrl("h");
  169. CPPUNIT_ASSERT(!v);
  170. }
  171. void RequestTest::testSetUrl10() {
  172. Request req;
  173. bool v = req.setUrl("");
  174. CPPUNIT_ASSERT(!v);
  175. }
  176. void RequestTest::testSetUrl11() {
  177. Request req;
  178. bool v = req.setUrl("http://host?query/");
  179. CPPUNIT_ASSERT(v);
  180. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  181. CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
  182. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  183. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
  184. CPPUNIT_ASSERT_EQUAL(std::string("?query/"), req.getQuery());
  185. }
  186. void RequestTest::testSetUrl12() {
  187. Request req;
  188. bool v = req.setUrl("http://host?query");
  189. CPPUNIT_ASSERT(v);
  190. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  191. CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
  192. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  193. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
  194. CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getQuery());
  195. }
  196. void RequestTest::testSetUrl13() {
  197. Request req;
  198. bool v = req.setUrl("http://host/?query");
  199. CPPUNIT_ASSERT(v);
  200. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  201. CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
  202. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  203. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
  204. CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getQuery());
  205. }
  206. void RequestTest::testSetUrl14() {
  207. Request req;
  208. bool v = req.setUrl("http://host:8080/abc?query");
  209. CPPUNIT_ASSERT(v);
  210. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  211. CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
  212. CPPUNIT_ASSERT_EQUAL((uint16_t)8080, req.getPort());
  213. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  214. CPPUNIT_ASSERT_EQUAL(std::string("abc"), req.getFile());
  215. CPPUNIT_ASSERT_EQUAL(std::string("?query"), req.getQuery());
  216. }
  217. void RequestTest::testSetUrl15()
  218. {
  219. Request req;
  220. // 2 slashes after host name and dir
  221. bool v = req.setUrl("http://host//dir1/dir2//file");
  222. CPPUNIT_ASSERT(v);
  223. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  224. CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
  225. CPPUNIT_ASSERT_EQUAL(std::string("/dir1/dir2"), req.getDir());
  226. CPPUNIT_ASSERT_EQUAL(std::string("file"), req.getFile());
  227. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  228. }
  229. void RequestTest::testSetUrl16()
  230. {
  231. Request req;
  232. // 2 slashes before file
  233. bool v = req.setUrl("http://host//file");
  234. CPPUNIT_ASSERT(v);
  235. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  236. CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
  237. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  238. CPPUNIT_ASSERT_EQUAL(std::string("file"), req.getFile());
  239. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  240. }
  241. void RequestTest::testSetUrl17()
  242. {
  243. Request req;
  244. bool v = req.setUrl("http://host:80/file<with%2 %20space/file with space;param%?a=/?");
  245. CPPUNIT_ASSERT(v);
  246. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  247. CPPUNIT_ASSERT_EQUAL(std::string("host"), req.getHost());
  248. CPPUNIT_ASSERT_EQUAL(std::string("/file%3Cwith%252%20%20space"), req.getDir());
  249. CPPUNIT_ASSERT_EQUAL(std::string("file%20with%20space;param%25"), req.getFile());
  250. CPPUNIT_ASSERT_EQUAL(std::string("?a=/?"), req.getQuery());
  251. CPPUNIT_ASSERT_EQUAL(std::string("http://host:80/file%3Cwith%252%20%20space"
  252. "/file%20with%20space;param%25?a=/?"),
  253. req.getCurrentUrl());
  254. CPPUNIT_ASSERT_EQUAL(std::string("http://host:80/file<with%2 %20space"
  255. "/file with space;param%?a=/?"),
  256. req.getUrl());
  257. }
  258. void RequestTest::testSetUrl18() {
  259. Request req;
  260. bool v = req.setUrl("http://1/");
  261. CPPUNIT_ASSERT(v);
  262. }
  263. void RequestTest::testSetUrl19() {
  264. Request req;
  265. // No host
  266. bool v = req.setUrl("http://user@");
  267. CPPUNIT_ASSERT(!v);
  268. }
  269. void RequestTest::testSetUrl20() {
  270. Request req;
  271. bool v;
  272. // Invalid port
  273. v = req.setUrl("http://localhost:65536");
  274. CPPUNIT_ASSERT(!v);
  275. v = req.setUrl("http://localhost:65535");
  276. CPPUNIT_ASSERT(v);
  277. v = req.setUrl("http://localhost:-80");
  278. CPPUNIT_ASSERT(!v);
  279. }
  280. void RequestTest::testRedirectUrl() {
  281. Request req;
  282. req.supportsPersistentConnection(false);
  283. req.setUrl("http://aria.rednoah.com:8080/aria2/index.html");
  284. bool v2 = req.redirectUrl("http://aria.rednoah.co.jp/");
  285. CPPUNIT_ASSERT(v2);
  286. // persistent connection flag is set to be true after redirection
  287. CPPUNIT_ASSERT(req.supportsPersistentConnection());
  288. // url must be the same
  289. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080/aria2/"
  290. "index.html"),
  291. req.getUrl());
  292. // currentUrl must be updated
  293. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.co.jp/"),
  294. req.getCurrentUrl());
  295. // previousUrl must be "" when redirection
  296. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPreviousUrl());
  297. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  298. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.co.jp"), req.getHost());
  299. CPPUNIT_ASSERT_EQUAL((uint16_t)80, req.getPort());
  300. CPPUNIT_ASSERT_EQUAL(std::string("/"), req.getDir());
  301. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getFile());
  302. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  303. // See redirect count is incremented.
  304. CPPUNIT_ASSERT_EQUAL((unsigned int)1, req.getRedirectCount());
  305. // Give abosulute path
  306. CPPUNIT_ASSERT(req.redirectUrl("/abspath/to/file"));
  307. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.co.jp/abspath/to/file"),
  308. req.getCurrentUrl());
  309. CPPUNIT_ASSERT_EQUAL((unsigned int)2, req.getRedirectCount());
  310. // Give relative path
  311. CPPUNIT_ASSERT(req.redirectUrl("relativepath/to/file"));
  312. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.co.jp/abspath/to/"
  313. "relativepath/to/file"),
  314. req.getCurrentUrl());
  315. CPPUNIT_ASSERT_EQUAL((unsigned int)3, req.getRedirectCount());
  316. // White space in path and fragment is appended.
  317. CPPUNIT_ASSERT(req.redirectUrl("http://example.org/white space#aria2"));
  318. CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/white%20space"),
  319. req.getCurrentUrl());
  320. }
  321. void RequestTest::testRedirectUrl2() {
  322. Request req;
  323. req.setUrl("http://aria.rednoah.com/download.html");
  324. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPreviousUrl());
  325. req.setReferer("http://aria.rednoah.com/");
  326. // previousUrl is updated when referer is specified
  327. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/"), req.getPreviousUrl());
  328. req.redirectUrl("http://aria.rednoah.com/403.html");
  329. // previousUrl must be "" when redirection
  330. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPreviousUrl());
  331. // referer is unchagned
  332. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/"), req.getReferer());
  333. req.redirectUrl("http://aria.rednoah.com/error.html");
  334. // previousUrl must be "" when redirection
  335. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPreviousUrl());
  336. }
  337. void RequestTest::testResetUrl() {
  338. Request req;
  339. req.setUrl("http://aria.rednoah.com:8080/aria2/index.html");
  340. req.setReferer("http://aria.rednoah.com:8080/");
  341. req.redirectUrl("ftp://aria.rednoah.co.jp/index_en.html?view=wide");
  342. bool v3 = req.resetUrl();
  343. CPPUNIT_ASSERT(v3);
  344. // currentUrl must equal to url
  345. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080/aria2/index.html"), req.getUrl());
  346. CPPUNIT_ASSERT_EQUAL(req.getUrl(), req.getCurrentUrl());
  347. // previousUrl must equal to referer
  348. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080/"), req.getPreviousUrl());
  349. // referer is unchanged
  350. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com:8080/"), req.getReferer());
  351. CPPUNIT_ASSERT_EQUAL(std::string("http"), req.getProtocol());
  352. CPPUNIT_ASSERT_EQUAL((uint16_t)8080, req.getPort());
  353. CPPUNIT_ASSERT_EQUAL(std::string("aria.rednoah.com"), req.getHost());
  354. CPPUNIT_ASSERT_EQUAL(std::string("/aria2"), req.getDir());
  355. CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
  356. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  357. }
  358. void RequestTest::testInnerLink() {
  359. Request req;
  360. bool v = req.setUrl("http://aria.rednoah.com/index.html#download");
  361. CPPUNIT_ASSERT(v);
  362. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/index.html"
  363. "#download"),
  364. req.getUrl());
  365. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/index.html"),
  366. req.getCurrentUrl());
  367. CPPUNIT_ASSERT_EQUAL(std::string("index.html"), req.getFile());
  368. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getQuery());
  369. }
  370. void RequestTest::testInnerLinkInReferer() {
  371. Request req;
  372. req.setReferer("http://aria.rednoah.com/home.html#top");
  373. CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/home.html"),
  374. req.getReferer());
  375. }
  376. void RequestTest::testSetUrl_zeroUsername()
  377. {
  378. Request req;
  379. CPPUNIT_ASSERT(req.setUrl("ftp://@localhost/download/aria2-1.0.0.tar.bz2"));
  380. CPPUNIT_ASSERT_EQUAL(std::string("ftp"), req.getProtocol());
  381. CPPUNIT_ASSERT_EQUAL((uint16_t)21, req.getPort());
  382. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
  383. CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
  384. CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
  385. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
  386. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
  387. CPPUNIT_ASSERT(req.setUrl("ftp://:@localhost/download/aria2-1.0.0.tar.bz2"));
  388. CPPUNIT_ASSERT_EQUAL(std::string("ftp"), req.getProtocol());
  389. CPPUNIT_ASSERT_EQUAL((uint16_t)21, req.getPort());
  390. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
  391. CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
  392. CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
  393. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
  394. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
  395. CPPUNIT_ASSERT(req.setUrl("ftp://:pass@localhost/download/aria2-1.0.0.tar.bz2"));
  396. CPPUNIT_ASSERT_EQUAL(std::string("ftp"), req.getProtocol());
  397. CPPUNIT_ASSERT_EQUAL((uint16_t)21, req.getPort());
  398. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
  399. CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
  400. CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
  401. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
  402. CPPUNIT_ASSERT_EQUAL(std::string("pass"), req.getPassword());
  403. }
  404. void RequestTest::testSetUrl_username()
  405. {
  406. Request req;
  407. CPPUNIT_ASSERT(req.setUrl("ftp://aria2user@localhost/download/aria2-1.0.0.tar.bz2"));
  408. CPPUNIT_ASSERT_EQUAL(std::string("ftp"), req.getProtocol());
  409. CPPUNIT_ASSERT_EQUAL((uint16_t)21, req.getPort());
  410. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
  411. CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
  412. CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
  413. CPPUNIT_ASSERT_EQUAL(std::string("aria2user"), req.getUsername());
  414. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
  415. }
  416. void RequestTest::testSetUrl_usernamePassword()
  417. {
  418. Request req;
  419. CPPUNIT_ASSERT(req.setUrl("ftp://aria2user%40:aria2pass%40@localhost/download/aria2-1.0.0.tar.bz2"));
  420. CPPUNIT_ASSERT_EQUAL(std::string("ftp"), req.getProtocol());
  421. CPPUNIT_ASSERT_EQUAL((uint16_t)21, req.getPort());
  422. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
  423. CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
  424. CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
  425. CPPUNIT_ASSERT_EQUAL(std::string("aria2user@"), req.getUsername());
  426. CPPUNIT_ASSERT_EQUAL(std::string("aria2pass@"), req.getPassword());
  427. // make sure that after new url is set, username and password are updated.
  428. CPPUNIT_ASSERT(req.setUrl("ftp://localhost/download/aria2-1.0.0.tar.bz2"));
  429. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
  430. CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
  431. }
  432. void RequestTest::testSetUrl_supportsPersistentConnection()
  433. {
  434. Request req;
  435. CPPUNIT_ASSERT(req.setUrl("http://host/file"));
  436. req.supportsPersistentConnection(false);
  437. CPPUNIT_ASSERT(!req.supportsPersistentConnection());
  438. req.setUrl("http://host/file");
  439. CPPUNIT_ASSERT(req.supportsPersistentConnection());
  440. }
  441. void RequestTest::testResetUrl_supportsPersistentConnection()
  442. {
  443. Request req;
  444. CPPUNIT_ASSERT(req.setUrl("http://host/file"));
  445. req.supportsPersistentConnection(false);
  446. CPPUNIT_ASSERT(!req.supportsPersistentConnection());
  447. req.resetUrl();
  448. CPPUNIT_ASSERT(req.supportsPersistentConnection());
  449. }
  450. void RequestTest::testRedirectUrl_supportsPersistentConnection()
  451. {
  452. Request req;
  453. CPPUNIT_ASSERT(req.setUrl("http://host/file"));
  454. req.supportsPersistentConnection(false);
  455. CPPUNIT_ASSERT(!req.supportsPersistentConnection());
  456. req.redirectUrl("http://host/file");
  457. CPPUNIT_ASSERT(req.supportsPersistentConnection());
  458. }
  459. void RequestTest::testSetUrl_ipv6()
  460. {
  461. Request req;
  462. CPPUNIT_ASSERT(!req.setUrl("http://[::1"));
  463. CPPUNIT_ASSERT(req.setUrl("http://[::1]"));
  464. CPPUNIT_ASSERT_EQUAL(std::string("::1"), req.getHost());
  465. CPPUNIT_ASSERT(req.setUrl("http://[::1]:8000/dir/file"));
  466. CPPUNIT_ASSERT_EQUAL(std::string("::1"), req.getHost());
  467. CPPUNIT_ASSERT_EQUAL((uint16_t)8000, req.getPort());
  468. CPPUNIT_ASSERT_EQUAL(std::string("/dir"), req.getDir());
  469. CPPUNIT_ASSERT_EQUAL(std::string("file"), req.getFile());
  470. CPPUNIT_ASSERT(req.isIPv6LiteralAddress());
  471. }
  472. void RequestTest::testGetURIHost()
  473. {
  474. Request req;
  475. CPPUNIT_ASSERT(req.setUrl("http://[::1]"));
  476. CPPUNIT_ASSERT_EQUAL(std::string("[::1]"), req.getURIHost());
  477. }
  478. } // namespace aria2