-:- module(http_open_hanging, [submit_request/0]).
+% Server
+:- use_module(library(process)).
+:- use_module(library(iso_ext)).
+:- use_module(library(os)).
+server_start([Process,Out]) :-
+ getenv("PROLOG", Prolog),
+ process_create(Prolog,
+ ["tests-pl/issue-http_open-hanging_server", "-t", "server"],
+ [process(Process), stdout(pipe(Out))]).
+
+server_wait_start([_Process, Out]) :-
+ get_char(Out, _C).
+
+server_stop([Process,_Out]) :-
+ process_kill(Process).
+
+% Client
:- use_module(library(charsio)).
:- use_module(library(http/http_open)).
request_headers([]),
headers(_)
],
- http_open("https://scryer.pl", _Stream, Options),
+ http_open("http://localhost:8472", _Stream, Options),
write_term('received response with status code':StatusCode, []), nl.
main :-
- send_request,
- send_request,
- send_request,
- send_request,
- send_request.
+ setup_call_cleanup(
+ server_start(Server),
+ (
+ server_wait_start(Server),
+ send_request,
+ send_request,
+ send_request,
+ send_request,
+ send_request
+ ),
+ server_stop(Server)
+ ).
:- initialization(main).
\ No newline at end of file
--- /dev/null
+:- use_module(library(process)).
+:- use_module(library(http/http_server)).
+
+server :-
+ http_listen(8472, [get(/, hello)]).
+
+hello(_Req, Res) :-
+ http_body(Res, text("Ok")).
\ No newline at end of file
load_module_test("tests-pl/issue_rename_file.pl", "file_renamed");
}
+#[serial]
#[test]
#[cfg(feature = "http")]
#[cfg(not(target_arch = "wasm32"))]
#[cfg_attr(miri, ignore = "it takes too long to run")]
-#[cfg_attr(not(miri), ignore = "flaky due to network requests")]
fn http_open_hanging() {
+ std::env::set_var("PROLOG", env!("CARGO_BIN_EXE_scryer-prolog"));
+
load_module_test_with_tokio_runtime(
"tests-pl/issue-http_open-hanging.pl",
"received response with status code:200\nreceived response with status code:200\nreceived response with status code:200\nreceived response with status code:200\nreceived response with status code:200\n"