Test_HTTPRequest.dpr 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705
  1. (* _ _
  2. * | |__ _ __ ___ ___ | | __
  3. * | '_ \| '__/ _ \ / _ \| |/ /
  4. * | |_) | | | (_) | (_) | <
  5. * |_.__/|_| \___/ \___/|_|\_\
  6. *
  7. * Microframework which helps to develop web Pascal applications.
  8. *
  9. * Copyright (c) 2012-2021 Silvio Clecio <[email protected]>
  10. *
  11. * Brook framework is free software; you can redistribute it and/or
  12. * modify it under the terms of the GNU Lesser General Public
  13. * License as published by the Free Software Foundation; either
  14. * version 2.1 of the License, or (at your option) any later version.
  15. *
  16. * Brook framework is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  19. * Lesser General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU Lesser General Public
  22. * License along with Brook framework; if not, write to the Free Software
  23. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  24. *)
  25. program Test_HTTPRequest;
  26. {$I Tests.inc}
  27. uses
  28. RTLConsts,
  29. SysUtils,
  30. StrUtils,
  31. Marshalling,
  32. libsagui,
  33. BrookLibraryLoader,
  34. BrookUtility,
  35. BrookString,
  36. BrookStringMap,
  37. BrookHTTPRequest,
  38. Test;
  39. type
  40. TFakeRequest = class
  41. end;
  42. var
  43. FakeRequest: TFakeRequest;
  44. FakeRequestHandle: Pointer;
  45. FakeHandle: Pointer;
  46. FakeUserData: Pointer;
  47. function fake_ip(const socket: Pcvoid; buf: Pcchar; size: csize_t): cint; cdecl;
  48. begin
  49. Move(socket^, buf^, size);
  50. Result := 0;
  51. end;
  52. function fake_httpreq_headers(req: Psg_httpreq): PPsg_strmap; cdecl;
  53. begin
  54. Assert(req = FakeRequestHandle);
  55. FakeHandle := nil;
  56. Result := @FakeHandle;
  57. end;
  58. function fake_httpreq_version(req: Psg_httpreq): Pcchar; cdecl;
  59. var
  60. M: TMarshaller;
  61. begin
  62. Assert(req = FakeRequestHandle);
  63. Result := M.ToCString('fake_version');
  64. end;
  65. function fake_httpreq_method(req: Psg_httpreq): Pcchar; cdecl;
  66. var
  67. M: TMarshaller;
  68. begin
  69. Assert(req = FakeRequestHandle);
  70. Result := M.ToCString('fake_method');
  71. end;
  72. function fake_httpreq_path(req: Psg_httpreq): Pcchar; cdecl;
  73. var
  74. M: TMarshaller;
  75. begin
  76. Assert(req = FakeRequestHandle);
  77. Result := M.ToCString('fake_path');
  78. end;
  79. function fake_httpreq_is_uploading(req: Psg_httpreq): cbool; cdecl;
  80. begin
  81. Assert(req = FakeRequestHandle);
  82. Result := True;
  83. end;
  84. function fakeg_httpreq_tls_session(req: Psg_httpreq): Pcvoid; cdecl;
  85. begin
  86. Assert(req = FakeRequestHandle);
  87. Result := Pointer(1);
  88. end;
  89. function fake_httpreq_client(req: Psg_httpreq): Pcvoid; cdecl;
  90. var
  91. M: TMarshaller;
  92. begin
  93. Assert(req = FakeRequestHandle);
  94. Result := M.ToCString('123.123.123.123');
  95. end;
  96. procedure AssignFakeAPI; {$IFNDEF DEBUG}inline;{$ENDIF}
  97. begin
  98. sg_ip := fake_ip;
  99. sg_httpreq_version := fake_httpreq_version;
  100. sg_httpreq_method := fake_httpreq_method;
  101. sg_httpreq_path := fake_httpreq_path;
  102. sg_httpreq_is_uploading := fake_httpreq_is_uploading;
  103. sg_httpreq_tls_session := fakeg_httpreq_tls_session;
  104. sg_httpreq_client := fake_httpreq_client;
  105. end;
  106. procedure AssignFakeHeadersAPI; {$IFNDEF DEBUG}inline;{$ENDIF}
  107. begin
  108. sg_httpreq_headers := fake_httpreq_headers;
  109. sg_httpreq_cookies := fake_httpreq_headers;
  110. sg_httpreq_params := fake_httpreq_headers;
  111. end;
  112. procedure DoHTTPRequestCreateParamIsNil;
  113. begin
  114. TBrookHTTPRequest.Create(nil);
  115. end;
  116. procedure Test_HTTPRequestCreate;
  117. var
  118. R: TBrookHTTPRequest;
  119. begin
  120. AssignFakeAPI;
  121. AssignFakeHeadersAPI;
  122. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  123. try
  124. Assert(R.Handle = FakeRequestHandle);
  125. Assert(Assigned(R.Uploads));
  126. Assert(Assigned(R.Headers));
  127. Assert(Assigned(R.Cookies));
  128. Assert(Assigned(R.Params));
  129. Assert(Assigned(R.Fields));
  130. Assert(Assigned(R.Payload));
  131. finally
  132. R.Free;
  133. end;
  134. AssignFakeAPI;
  135. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  136. try
  137. Assert(R.Version = 'fake_version');
  138. Assert(R.Method = 'fake_method');
  139. Assert(R.Path = 'fake_path');
  140. Assert(R.IsUploading);
  141. Assert(Assigned(R.TLSSession));
  142. finally
  143. R.Free;
  144. end;
  145. TBrookLibraryLoader.Unload;
  146. TBrookLibraryLoader.Load;
  147. AssertExcept(DoHTTPRequestCreateParamIsNil, EArgumentNilException,
  148. Format(SParamIsNil, ['AHandle']));
  149. end;
  150. function fake_httpreq_method_get(req: Psg_httpreq): Pcchar; cdecl;
  151. var
  152. M: TMarshaller;
  153. begin
  154. Assert(req = FakeRequestHandle);
  155. Result := M.ToCString('GET');
  156. end;
  157. function fake_httpreq_method_post(req: Psg_httpreq): Pcchar; cdecl;
  158. var
  159. M: TMarshaller;
  160. begin
  161. Assert(req = FakeRequestHandle);
  162. Result := M.ToCString('POST');
  163. end;
  164. procedure Test_HTTPRequestIsPost;
  165. var
  166. R: TBrookHTTPRequest;
  167. begin
  168. AssignFakeAPI;
  169. AssignFakeHeadersAPI;
  170. sg_httpreq_method := fake_httpreq_method_get;
  171. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  172. try
  173. Assert(not R.IsPost);
  174. finally
  175. R.Free;
  176. end;
  177. sg_httpreq_method := fake_httpreq_method_post;
  178. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  179. try
  180. Assert(R.IsPost);
  181. finally
  182. R.Free;
  183. end;
  184. end;
  185. function fake_httpreq_path_nofavicon(req: Psg_httpreq): Pcchar; cdecl;
  186. var
  187. M: TMarshaller;
  188. begin
  189. Assert(req = FakeRequestHandle);
  190. Result := M.ToCString('/foo');
  191. end;
  192. function fake_httpreq_path_favicon(req: Psg_httpreq): Pcchar; cdecl;
  193. var
  194. M: TMarshaller;
  195. begin
  196. Assert(req = FakeRequestHandle);
  197. Result := M.ToCString('/favicon.ico');
  198. end;
  199. procedure Test_HTTPRequestIsFavicon;
  200. var
  201. R: TBrookHTTPRequest;
  202. begin
  203. AssignFakeHeadersAPI;
  204. sg_httpreq_path := fake_httpreq_path_nofavicon;
  205. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  206. try
  207. Assert(not R.IsFavicon);
  208. finally
  209. R.Free;
  210. end;
  211. sg_httpreq_path := fake_httpreq_path_favicon;
  212. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  213. try
  214. Assert(R.IsFavicon);
  215. finally
  216. R.Free;
  217. end;
  218. end;
  219. function fake_httpreq_tls_session_nil(req: Psg_httpreq): Pcvoid; cdecl;
  220. begin
  221. Assert(req = FakeRequestHandle);
  222. Result := nil;
  223. end;
  224. function fake_httpreq_tls_session_ok(req: Psg_httpreq): Pcvoid; cdecl;
  225. begin
  226. Assert(req = FakeRequestHandle);
  227. Result := Pointer(1);
  228. end;
  229. procedure Test_HTTPRequestIsSecure;
  230. var
  231. R: TBrookHTTPRequest;
  232. begin
  233. AssignFakeHeadersAPI;
  234. sg_httpreq_tls_session := fake_httpreq_tls_session_nil;
  235. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  236. try
  237. Assert(not R.IsSecure);
  238. finally
  239. R.Free;
  240. end;
  241. sg_httpreq_tls_session := fake_httpreq_tls_session_ok;
  242. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  243. try
  244. Assert(R.IsSecure);
  245. finally
  246. R.Free;
  247. end;
  248. end;
  249. function fake_httpreq_method_head(req: Psg_httpreq): Pcchar; cdecl;
  250. var
  251. M: TMarshaller;
  252. begin
  253. Assert(req = FakeRequestHandle);
  254. Result := M.ToCString('HEAD');
  255. end;
  256. procedure Test_HTTPRequestIsCachable;
  257. var
  258. R: TBrookHTTPRequest;
  259. begin
  260. AssignFakeHeadersAPI;
  261. sg_httpreq_method := fake_httpreq_method_head;
  262. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  263. try
  264. Assert(R.IsCachable);
  265. finally
  266. R.Free;
  267. end;
  268. sg_httpreq_method := fake_httpreq_method_get;
  269. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  270. try
  271. Assert(R.IsCachable);
  272. finally
  273. R.Free;
  274. end;
  275. end;
  276. procedure Test_HTTPRequestIsXhr;
  277. var
  278. R: TBrookHTTPRequest;
  279. begin
  280. AssignFakeHeadersAPI;
  281. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  282. try
  283. R.Headers.Clear;
  284. Assert(not R.IsXhr);
  285. finally
  286. R.Free;
  287. end;
  288. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  289. try
  290. R.Headers.Add('X-Requested-With', 'xmlhttprequest');
  291. Assert(R.IsXhr);
  292. finally
  293. R.Free;
  294. end;
  295. end;
  296. procedure Test_HTTPRequestHeaders;
  297. var
  298. R: TBrookHTTPRequest;
  299. begin
  300. AssignFakeHeadersAPI;
  301. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  302. try
  303. Assert(Assigned(R.Headers));
  304. R.Headers.Add('foo', 'bar');
  305. Assert(R.Headers['foo'] = 'bar');
  306. finally
  307. R.Free;
  308. end;
  309. end;
  310. procedure Test_HTTPRequestCookies;
  311. var
  312. R: TBrookHTTPRequest;
  313. begin
  314. AssignFakeHeadersAPI;
  315. sg_httpreq_cookies := fake_httpreq_headers;
  316. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  317. try
  318. Assert(Assigned(R.Cookies));
  319. R.Cookies.Add('foo', 'bar');
  320. Assert(R.Cookies['foo'] = 'bar');
  321. finally
  322. R.Free;
  323. end;
  324. end;
  325. procedure Test_HTTPRequestParams;
  326. var
  327. R: TBrookHTTPRequest;
  328. begin
  329. AssignFakeHeadersAPI;
  330. sg_httpreq_params := fake_httpreq_headers;
  331. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  332. try
  333. Assert(Assigned(R.Params));
  334. R.Params.Add('foo', 'bar');
  335. Assert(R.Params['foo'] = 'bar');
  336. finally
  337. R.Free;
  338. end;
  339. end;
  340. procedure Test_HTTPRequestFields;
  341. var
  342. R: TBrookHTTPRequest;
  343. begin
  344. AssignFakeHeadersAPI;
  345. sg_httpreq_fields := fake_httpreq_headers;
  346. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  347. try
  348. Assert(Assigned(R.Fields));
  349. R.Fields.Add('foo', 'bar');
  350. Assert(R.Fields['foo'] = 'bar');
  351. finally
  352. R.Free;
  353. end;
  354. end;
  355. function fake_httpreq_payload(req: Psg_httpreq): Psg_str; cdecl;
  356. begin
  357. Assert(req = FakeRequestHandle);
  358. FakeHandle := nil;
  359. Result := FakeHandle;
  360. end;
  361. procedure Test_HTTPRequestPayload;
  362. var
  363. R: TBrookHTTPRequest;
  364. begin
  365. AssignFakeHeadersAPI;
  366. sg_httpreq_payload := fake_httpreq_payload;
  367. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  368. try
  369. Assert(Assigned(R.Payload));
  370. R.Payload.Write('foo');
  371. Assert(R.Payload.Text = 'foo');
  372. finally
  373. R.Free;
  374. end;
  375. end;
  376. procedure Test_HTTPRequestVersion;
  377. var
  378. R: TBrookHTTPRequest;
  379. begin
  380. AssignFakeAPI;
  381. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  382. try
  383. Assert(R.Version = 'fake_version');
  384. finally
  385. R.Free;
  386. end;
  387. end;
  388. procedure Test_HTTPRequestMethod;
  389. var
  390. R: TBrookHTTPRequest;
  391. begin
  392. AssignFakeHeadersAPI;
  393. AssignFakeAPI;
  394. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  395. try
  396. Assert(R.Method = 'fake_method');
  397. finally
  398. R.Free;
  399. end;
  400. end;
  401. procedure Test_HTTPRequestPath;
  402. var
  403. R: TBrookHTTPRequest;
  404. begin
  405. AssignFakeHeadersAPI;
  406. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  407. try
  408. Assert(R.Path = 'fake_path');
  409. finally
  410. R.Free;
  411. end;
  412. end;
  413. function fake_httpreq_client_nil(req: Psg_httpreq): Pcvoid; cdecl;
  414. begin
  415. Assert(req = FakeRequestHandle);
  416. Result := nil;
  417. end;
  418. procedure DoHTTPRequestIPLibNotLoaded(const AArgs: array of const);
  419. begin
  420. Assert(TBrookHTTPRequest(AArgs[0].VObject).IP = '123.123.123.123');
  421. end;
  422. procedure Test_HTTPRequestIP;
  423. var
  424. R: TBrookHTTPRequest;
  425. begin
  426. AssignFakeHeadersAPI;
  427. sg_httpreq_client := fake_httpreq_client_nil;
  428. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  429. try
  430. Assert(R.IP.IsEmpty);
  431. finally
  432. R.Free;
  433. end;
  434. AssignFakeAPI;
  435. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  436. try
  437. Assert(R.IP = '123.123.123.123');
  438. finally
  439. R.Free;
  440. end;
  441. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  442. try
  443. TBrookLibraryLoader.Unload;
  444. AssertExcept(DoHTTPRequestIPLibNotLoaded, ESgLibNotLoaded,
  445. Format(SSgLibNotLoaded, [IfThen(SgLib.GetLastName = '',
  446. SG_LIB_NAME, SgLib.GetLastName)]), [R]);
  447. TBrookLibraryLoader.Load;
  448. finally
  449. R.Free;
  450. end;
  451. end;
  452. procedure Test_HTTPRequestContentType;
  453. var
  454. R: TBrookHTTPRequest;
  455. begin
  456. AssignFakeAPI;
  457. AssignFakeHeadersAPI;
  458. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  459. try
  460. Assert(R.ContentType.IsEmpty);
  461. R.Headers.Add('Content-Type', 'html/text');
  462. Assert(R.ContentType = 'html/text');
  463. finally
  464. R.Free;
  465. end;
  466. end;
  467. procedure Test_HTTPRequestUserAgent;
  468. var
  469. R: TBrookHTTPRequest;
  470. begin
  471. AssignFakeHeadersAPI;
  472. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  473. try
  474. Assert(R.UserAgent.IsEmpty);
  475. R.Headers.Add('User-Agent', 'Brook');
  476. Assert(R.UserAgent = 'Brook');
  477. finally
  478. R.Free;
  479. end;
  480. end;
  481. procedure Test_HTTPRequestReferer;
  482. var
  483. R: TBrookHTTPRequest;
  484. begin
  485. AssignFakeHeadersAPI;
  486. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  487. try
  488. Assert(R.Referer.IsEmpty);
  489. R.Headers.Add('Referer', '/foo');
  490. Assert(R.Referer = '/foo');
  491. R.Headers.Clear;
  492. R.Headers.Add('Referrer', '/bar');
  493. Assert(R.Referer = '/bar');
  494. finally
  495. R.Free;
  496. end;
  497. end;
  498. function fake_httpreq_paths(req: Psg_httpreq): Pcchar; cdecl;
  499. begin
  500. Assert(req = FakeRequestHandle);
  501. Result := '/foo/bar';
  502. end;
  503. procedure Test_HTTPRequestPaths;
  504. var
  505. R: TBrookHTTPRequest;
  506. begin
  507. TBrookLibraryLoader.Unload;
  508. TBrookLibraryLoader.Load;
  509. AssignFakeAPI;
  510. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  511. try
  512. Assert(Length(R.Paths) = 1);
  513. finally
  514. R.Free;
  515. end;
  516. sg_httpreq_path := fake_httpreq_paths;
  517. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  518. try
  519. Assert(Length(R.Paths) = 2);
  520. finally
  521. R.Free;
  522. end;
  523. end;
  524. procedure Test_HTTPRequestIsUploading;
  525. var
  526. R: TBrookHTTPRequest;
  527. begin
  528. TBrookLibraryLoader.Unload;
  529. TBrookLibraryLoader.Load;
  530. AssignFakeAPI;
  531. AssignFakeHeadersAPI;
  532. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  533. try
  534. Assert(R.IsUploading);
  535. finally
  536. R.Free;
  537. end;
  538. end;
  539. function fake_httpreq_uploads(req: Psg_httpreq): Psg_httpupld; cdecl;
  540. begin
  541. Assert(req = FakeRequestHandle);
  542. Result := FakeHandle;
  543. end;
  544. procedure Test_HTTPRequestUploads;
  545. var
  546. R: TBrookHTTPRequest;
  547. begin
  548. TBrookLibraryLoader.Unload;
  549. TBrookLibraryLoader.Load;
  550. AssignFakeAPI;
  551. sg_httpreq_uploads := fake_httpreq_uploads;
  552. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  553. try
  554. Assert(R.Uploads.Handle = FakeHandle);
  555. finally
  556. R.Free;
  557. end;
  558. end;
  559. function fake_httpreq_tls_session(req: Psg_httpreq): Pcvoid; cdecl;
  560. begin
  561. Assert(req = FakeRequestHandle);
  562. Result := FakeHandle;
  563. end;
  564. procedure Test_HTTPRequestTLSSession;
  565. var
  566. R: TBrookHTTPRequest;
  567. begin
  568. TBrookLibraryLoader.Unload;
  569. TBrookLibraryLoader.Load;
  570. AssignFakeAPI;
  571. sg_httpreq_tls_session := fake_httpreq_tls_session;
  572. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  573. try
  574. Assert(R.TLSSession = FakeHandle);
  575. finally
  576. R.Free;
  577. end;
  578. end;
  579. function fake_httpreq_set_user_data(req: Psg_httpreq; data: Pcvoid): cint;
  580. cdecl;
  581. begin
  582. Assert(req = FakeRequestHandle);
  583. FakeUserData := data;
  584. Result := 0;
  585. end;
  586. function fake_httpreq_user_data(req: Psg_httpreq): Pcvoid; cdecl;
  587. begin
  588. Assert(req = FakeRequestHandle);
  589. Result := FakeUserData;
  590. end;
  591. procedure Test_HTTPRequestUserData;
  592. var
  593. R: TBrookHTTPRequest;
  594. X: Integer;
  595. begin
  596. TBrookLibraryLoader.Unload;
  597. TBrookLibraryLoader.Load;
  598. AssignFakeAPI;
  599. sg_httpreq_set_user_data := fake_httpreq_set_user_data;
  600. sg_httpreq_user_data := fake_httpreq_user_data;
  601. R := TBrookHTTPRequest.Create(FakeRequestHandle);
  602. try
  603. R.UserData := nil;
  604. Assert(not Assigned(R.UserData));
  605. X := 123;
  606. R.UserData := @X;
  607. Assert(PInteger(R.UserData)^ = 123);
  608. finally
  609. R.Free;
  610. end;
  611. end;
  612. begin
  613. {$IF (NOT DEFINED(FPC)) AND DEFINED(DEBUG)}
  614. ReportMemoryLeaksOnShutdown := True;
  615. {$ENDIF}
  616. TBrookLibraryLoader.Load;
  617. FakeRequest := TFakeRequest.Create;
  618. try
  619. FakeRequestHandle := FakeRequest;
  620. Test_HTTPRequestCreate;
  621. // Test_HTTPRequestDestroy - not required
  622. Test_HTTPRequestIsPost;
  623. Test_HTTPRequestIsFavicon;
  624. Test_HTTPRequestIsSecure;
  625. Test_HTTPRequestIsCachable;
  626. Test_HTTPRequestIsXhr;
  627. Test_HTTPRequestHeaders;
  628. Test_HTTPRequestCookies;
  629. Test_HTTPRequestParams;
  630. Test_HTTPRequestFields;
  631. Test_HTTPRequestPayload;
  632. Test_HTTPRequestVersion;
  633. Test_HTTPRequestMethod;
  634. Test_HTTPRequestPath;
  635. Test_HTTPRequestIP;
  636. Test_HTTPRequestContentType;
  637. Test_HTTPRequestUserAgent;
  638. Test_HTTPRequestReferer;
  639. Test_HTTPRequestPaths;
  640. Test_HTTPRequestIsUploading;
  641. Test_HTTPRequestUploads;
  642. Test_HTTPRequestTLSSession;
  643. Test_HTTPRequestUserData;
  644. finally
  645. TBrookLibraryLoader.Unload;
  646. FakeRequest.Free;
  647. end;
  648. end.